I have a script that calls a template. The template has a tal expressions like this <p tal:content="structure here/ploneDoc/getText"> </p> I want my script to call the template in such a way that the string 'ploneDoc' is replaced by a different string. I'm not sure how to go about parameterizing a tales expressions like this. Any pointers? -- David Bear College of Public Programs at ASU 602-464-0424
On Wed, Sep 10, 2008 at 07:57:29PM -0700, David Bear wrote:
I have a script that calls a template.
The template has a tal expressions like this
<p tal:content="structure here/ploneDoc/getText"> </p>
I want my script to call the template in such a way that the string 'ploneDoc' is replaced by a different string.
I'm not sure how to go about parameterizing a tales expressions like this.
It is possible, by sticking a question mark in front of ploneDoc; but afaict you can only use a variable already in the namespace, i.e. you'd have to define it first. Like so: <p tal:define="docname options/ploneDoc" tal:content="structure here/?docname/getText"> </p> But I have literally never seen this obscure feature in real use, because nobody seems to know about it (I had forgotten it myself), and because it's not necessary. I'd prefer to have the script just pass in the object you want, as per this document: http://plope.com/Books/2_7Edition/BasicScripting.stx#1-3 So, in your script, something like: doc = context.restrictedTraverse(some_path) return context.mytemplate(mydoc=doc) Then, in your template just do: <p tal:content="structure options/mydoc/getText"></p> -- Paul Winkler http://www.slinkp.com
Thanks to both Paul and AJ -- both suggestions were helpful. The extended description Paul gave me below was particularly use. Here's what I learned: 1) the form object is automagically handed to the template when you do a 'return context.mytemplate(item='something') 2) I assumed that I would have to pass the form object to the template -- but this is not needed. More usefull is that when 'item' is given to the template as parameter, shown above, that the template gets a NEW? namespace called 'options'. I think this is new to me. 3) then, within the template the tales expression options/item gives me 'something'. This really helps me understand better how script and templates work together. A year from now, I'll need to relearn this again and may google my answer above... Thanks to all on the plone list. On 9/10/08, Paul Winkler <slinkp@gmail.com> wrote:
On Wed, Sep 10, 2008 at 07:57:29PM -0700, David Bear wrote:
I have a script that calls a template.
The template has a tal expressions like this
<p tal:content="structure here/ploneDoc/getText"> </p>
I want my script to call the template in such a way that the string 'ploneDoc' is replaced by a different string.
I'm not sure how to go about parameterizing a tales expressions like this.
It is possible, by sticking a question mark in front of ploneDoc; but afaict you can only use a variable already in the namespace, i.e. you'd have to define it first. Like so:
<p tal:define="docname options/ploneDoc" tal:content="structure here/?docname/getText"> </p>
But I have literally never seen this obscure feature in real use, because nobody seems to know about it (I had forgotten it myself), and because it's not necessary. I'd prefer to have the script just pass in the object you want, as per this document: http://plope.com/Books/2_7Edition/BasicScripting.stx#1-3
So, in your script, something like:
doc = context.restrictedTraverse(some_path) return context.mytemplate(mydoc=doc)
Then, in your template just do:
<p tal:content="structure options/mydoc/getText"></p>
--
Paul Winkler http://www.slinkp.com _______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
-- David Bear College of Public Programs at ASU 602-464-0424
--On 10. September 2008 19:57:29 -0700 David Bear <David.Bear@asu.edu> wrote:
I have a script that calls a template.
The template has a tal expressions like this
<p tal:content="structure here/ploneDoc/getText"> </p>
I want my script to call the template in such a way that the string 'ploneDoc' is replaced by a different string.
The well-known techniques for obtaining a object through acquisition obj = getattr(context, object_id) or path traversal obj = context.restrictedTraverse('/path/to/obj') also works here. -aj
participants (3)
-
Andreas Jung -
David Bear -
Paul Winkler