Dennis Nichols wrote:
I'm having trouble using the value of a property to determine which object to render (Zope 2.2.1, if it makes any difference). Starting from the beginning, let's say I have two folders A and B with four DTML methods (Nilo, Alpha, Smalpha, and Bravo):
/ Nilo /A Alpha Smalpha /B Bravo
From Alpha, I can render Nilo, Smalpha, and Bravo by using this dtml:
<dtml-var Nilo> (or <dtml-var "Nilo">) <dtml-var Smalpha> (or <dtml-var "Smalpha">) <dtml-var "B.Bravo"> (not <dtml-var B.Bravo>!)
OK, now I want a property of folder A, call it 'choice', to determine what should be rendered by Alpha. So I rewrite Alpha to include:
either <dtml-var "_[choice]"> or <dtml-var "_.getitem(choice)">
These work nicely if I set 'choice' to 'Nilo' or 'Smalpha' but I don't see how to make either one work for Bravo! Setting 'choice' to 'B.Bravo' gives me:
Error Type: KeyError Error Value: B.Bravo
How do I get this to work for Bravo (and still keep it working for the other cases)? Clearly my zen needs some tending to.
You can use restrictedTraverse('slash/delimited/path') If you have a slash at the start, the traversal starts from the Zope root object. Otherwise, it is relative. You can also use a sequence to represent your path. The slash at the start is represented by an empty string at the beginning of your sequence. See the documentation on the interfaces Wiki. http://www.zope.org/Members/michel/Projects/Interfaces/Traversal Also, see lib/python/OFS/Traversable.py -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net