I'm sorry to have to post this request, but I'm lost behind python syntax again. This works: <dtml-with "folder1.folder2"><dtml-var index_html></dtml-with> This doesn't: <dtml-call "REQUEST.set('sName', 'folder1.folder2')"> <dtml-with "_[sName]"><dtml-var index_html></dtml-with> Nor does: <dtml-with "_.getitem(sName)"><dtml-var index_html></dtml-with> What am I missing? Thanks, Paz
On Fri, Jun 14, 2002 at 02:08:58PM +0200, Paz wrote:
<dtml-with "folder1.folder2"><dtml-var index_html></dtml-with>
This doesn't: <dtml-call "REQUEST.set('sName', 'folder1.folder2')"> <dtml-with "_[sName]"><dtml-var index_html></dtml-with>
Nor does: <dtml-with "_.getitem(sName)"><dtml-var index_html></dtml-with>
What am I missing?
<dtml-with "folder1.folder2"> is not equivalent to <dtml-with "_.getitem('folder1.folder2')"> it is eq to <dtml-with "_.getitem('folder1').getitem('folder2')"> Oleg. -- Oleg Broytmann http://www.zope.org/Members/phd/ phd@phd.pp.ru Programmers don't die, they just GOSUB without RETURN.
On Fri, Jun 14, 2002 at 02:08:58PM +0200, Paz wrote:
I'm sorry to have to post this request, but I'm lost behind python syntax again.
This works:
<dtml-with "folder1.folder2"><dtml-var index_html></dtml-with>
This doesn't: <dtml-call "REQUEST.set('sName', 'folder1.folder2')"> <dtml-with "_[sName]"><dtml-var index_html></dtml-with>
To expand on Oleg's remark in a different way -- _[sName] asks for the contents in the _ namespace of the item whose name is given by the variable sName. You wanted _['sName'], which is the contents in the _ namespace of the item named 'sName'. Note the extra level of dereferencing. 90% of the time, when you are working with a dictionary, you want dict['someName']. And the other 10% of the time, you have to be sure that if you use dict[someVariable], that variable has been assigned a valid name of an item in the dictionary. [Technically, this language is not quite right, I should be talking of keys and values, (rather than variables and contents), but I think the way I have said it will be easier to wrap your mind around.] On the other hand, it would not have worked anyway, per Oleg's explanation. Jim Penny
Nor does: <dtml-with "_.getitem(sName)"><dtml-var index_html></dtml-with>
What am I missing?
Thanks, Paz
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
Hi all, Thanks Oleg and Jim for your responses. And also Max, on a previous thread. Although the comments are enlightening, I still don't understand a way that I can get to my solution. What I need to do is be able to pull a document from the root of my site based on a variable. This variable could by several levels deep, it doesn't matter. The best of it is that I need to render several many objects that may reside at each level I traverse from the root. Level1 / RenderIndex Level2 / RenderIndex Level2 As a solution I tried the following: <dtml-var "_[sName'].index_html"> Based on responses from Jim and Oleg, this doesn't work past the first iteration ('something'.index_html) because anything that is something.something is really rendered as 'something.something' rather than 'something' . 'something'... if you catch my drift. A string is really a very literal thing in python, and you have to do really nasty things to convince it otherwise... <dtml-in "listWithSeveralItems"> <dtml-with sequence-item> <dtml-var index> </dtml-with> </dtml-in> The above doesn't work either because you iterate over values within the current context rather than ascending one level each iteration which is desired. What I need to be able to do is set the current namespace by a loop, call some things within that namespace, and then iterate up again to the next namespace and repeat. Either python or dtml, I still don't see how I can get there..... Sorry for the continued hassles, Paz -----Original Message----- From: zope-admin@zope.org [mailto:zope-admin@zope.org] On Behalf Of Jim Penny Sent: Friday, June 14, 2002 4:42 PM To: Paz; zope@zope.org Subject: Re: [Zope] simple var On Fri, Jun 14, 2002 at 02:08:58PM +0200, Paz wrote:
I'm sorry to have to post this request, but I'm lost behind python syntax again.
This works:
<dtml-with "folder1.folder2"><dtml-var index_html></dtml-with>
This doesn't: <dtml-call "REQUEST.set('sName', 'folder1.folder2')"> <dtml-with "_[sName]"><dtml-var index_html></dtml-with>
To expand on Oleg's remark in a different way -- _[sName] asks for the contents in the _ namespace of the item whose name is given by the variable sName. You wanted _['sName'], which is the contents in the _ namespace of the item named 'sName'. Note the extra level of dereferencing. 90% of the time, when you are working with a dictionary, you want dict['someName']. And the other 10% of the time, you have to be sure that if you use dict[someVariable], that variable has been assigned a valid name of an item in the dictionary. [Technically, this language is not quite right, I should be talking of keys and values, (rather than variables and contents), but I think the way I have said it will be easier to wrap your mind around.] On the other hand, it would not have worked anyway, per Oleg's explanation. Jim Penny
Nor does: <dtml-with "_.getitem(sName)"><dtml-var index_html></dtml-with>
What am I missing?
Thanks, Paz
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
On Fri, Jun 14, 2002 at 09:14:21PM +0200, Paul Zwarts wrote:
<dtml-var "_[sName'].index_html">
Based on responses from Jim and Oleg, this doesn't work past the first iteration ('something'.index_html) because anything that is something.something is really rendered as 'something.something' rather than 'something' . 'something'...
Tthen split the string yourself and traverse the path! Something like this: attr_list = "some1.some2".split('.') object = _.getitem(attr_list[0]) for attr in attr_list[1:]: object = object.getitem(attr) Understand? Oleg. -- Oleg Broytmann http://www.zope.org/Members/phd/ phd@phd.pp.ru Programmers don't die, they just GOSUB without RETURN.
participants (4)
-
Jim Penny -
Oleg Broytmann -
Paul Zwarts -
Paz