On Tue, 15 Aug 2000, Joshua Brauer wrote:
I have a folder (Parts) that contains dtml documents that are snippets of code. I want to include some of them which I have listed in a variable (select).
So I use code like this:
<dtml-with parts> <dtml-in select> <dtml-var "_.getitem('sequence-item')"> </dtml-in> </dtml-with>
Right idea, but not quite there. Your 'select' variable holds the string ids of the objects, but you need the actual objects in order to get them rendered. getitem will look up the object given the id, but you're actually telling it here to look up the value (in the namespace) of the string 'sequence-item'. What you get, as you observed, is the id string stored at that moment in sequence-item. So you need to loose the quotes so it will look up that id string in the namespace. However, there's a wrinkle: sequence-item is not a valid python variable name. So you have to look sequence-item up in the namespace after all. You could do: <dtml-var "_.getitem(_.getitem('sequence-item'))"> However, Zope provides a shortcut for this, using the namespace variable (_) as a dictionary: <dtml-var "_.getitem(_['sequence-item'])"> This, though, is going to *just* retrieve the object, it won't cause it to render (I think you'll get the DTML source, which I think is the representation of the object as string, which is the default conversion in this context <grin>)>. So what you a really want to do is execute the object after you've retreived it, which will case it (unless it is a ZClass that is not subclassed from Renderable) to render itself, which is what I think you want. To do that you pass a true flag to getitem as its second argument: <dtml-var "_.getitem(_['sequence-itmem'],1)"> Now, _ has this additional feature (Chris Whithers would say bug) that it calls any callable object it is asked to retrieve via the dictionary lookup. So you should be able to shorten this to: <dtml-var "_[_['sequence-item]]"> There's one more subtlety (are you getting tired of this yet?) involving the need to pass the namespace to called DTML methods, but I believe _ takes care of that for you in this example so I won't go into it. But it's a FAQ, too, so you might want to look for the answer before it bites you <grin>. --RDM