Thoughts on <dtml-in ...> and related matters
I'm relatively new to Zope, and so unfamiliar with all the issues that this might raise, but here are my thoughts on the dtml-in "sequence-item" issue. It seems that what we have here is a specific instance of a general problem: dtml variables which aren't readily accessible in Python because they use identifiers that aren't valid in Python. In the first instance I would suggest a policy of making built-in dtml names Python-compatible. There seems to be a lack of consistency in the naming conventions which would benefit from this anyhow. Yes it's true that renaming any variable like this can impact on already-written programs, but that's true of any change to the namespace. I've also noted that there is a large amount of confusion amongst Zope newbies when it comes to the differences between the dtml any Python namespaces -- understandably so. Even if you can understand what a namespace is, what a context is, that there is a difference between Python and DTML in terms of these concepts, and how acquisition works in general, it's still damn hard to figure out exactly what identifiers are valid and associated with what object in these circumstances. If anyone has a good tutorial on the matter, please point me to it. As someone who is familiar with programming language theory but new to Zope, I often find myself asking "WTF is in my namespace now?" And there seems to be a high number of questions relating to how to fetch dtml-accessable objects in Python. A smoothing out of these differences would be beneficial to all, I think. Finally, with regards to the idea of tying sequence-item and related variables to other names (such as foo-item, bar-item, etc), I would anticipate this being done by creating a loop control variable with properties. For example, one could have the following. <dtml-in mylist using="foo"> Key: <dtml-var foo.key>; value: <dtml-var foo.item> </dtml-in> This could be introduced as a *new* syntax for the dtml-in tag, such that omitting the "using" attribute causes the old sequence-* suite of variables to be used. This should obviate any issues with namespace pollution: the programmer declares the new variable (and thus namespace) to populate. Presumably the variable can also be declared in a way that makes it directly-accessable in Python, too. Like I say, I'm not familiar enough with Zope to know if all this is viable, but it's the kind of behaviour that I'd go looking for if I thought it existed. Regards, TFBW
participants (1)
-
The Famous Brett Watson