passing args from zpt to zpt
Folks, Does anyone know if there is a way to pass arguments from a Page Template to another? The only way I can think of is to use SESSION to hold the values, and this seems clunky as I am then forced to remove those arguments from SESSION after. I need to do something like: <!-- my main.pt is as follows --> <span tal:define="global length python:23"> <metal:block tal:replace="structure here/nested.pt"/> </span> <!-- and nested.pt looks like this --> <b tal:content="length|string:nothing was passed down"/> For whatever reason, even the global declaration doesn't seem to pass the value on down to nested.pt (my understanding of scoping is obviously flawed :). Thanks, Roy. __________________________________ Do you Yahoo!? Yahoo! Movies - Buy advance tickets for 'Shrek 2' http://movies.yahoo.com/showtimes/movie?mid=1808405861
Hi Let's say you have 2 ZPT's in the same folder, named x and y. x will call y with a parameter: x --- <html> <head> <title tal:content="template/title">The title</title> </head> <body> Value from y:<br> <tal:block define="body python:here.y.pt_render(extra_context={'here':here, 'value': 10})"> <span tal:replace="structure body"/> </tal:block> </body> </html> y --- <b><span tal:replace="value"/></b> Regards, Dragos PS: If you are using this in a python product here is a way to handle this problem http://zpt.sourceforge.net/. The class is very simple actually, something like: manage_addCustomTemplateForm = PageTemplateFile('PATH_TO_ZPT_CONSTRUCTOR_PAGE', globals()) def manage_addCustomTemplate(self, id='', title='', file='', REQUEST=None): """ add a new CusotmTemplate object """ content_type = None if file != '': if file.filename: headers = getattr(file, 'headers', None) content_type = headers.get('content_type') ob = Template(id, title, file, content_type) self._setObject(id, ob) if REQUEST: return self.manage_main(self, REQUEST, update_menu=1) class CustomTemplate(ZopePageTemplate): """ the CustomTemplate class """ meta_type = 'CustomTemplate' icon = 'misc_/YOURPRODUCT/template' manage_options = (ZopePageTemplate.manage_options) security = ClassSecurityInfo() def __init__(self, id, title, text, content_type): """ initialize the Template """ ZopePageTemplate.__dict__['__init__'](self, id, text, content_type) self.title = title def __call__(self, context={}, *args): """ """ if not context.has_key('args'): context['args'] = args return self.pt_render(extra_context=context) def om_icons(self): """ """ icons = ({'path': 'misc_/YOURPRODUCT/picture_for_this_class, 'alt': self.meta_type, 'title': self.meta_type},) if self._v_errors: icons = icons + ({'path': 'misc_/PageTemplates/exclamation.gif', 'alt': 'Error', 'title': 'This template has an error'},) return icons InitializeClass(CustomTemplate) Hope this will help.
Folks,
Does anyone know if there is a way to pass arguments from a Page Template to another? The only way I can think of is to use SESSION to hold the values, and this seems clunky as I am then forced to remove those arguments from SESSION after.
I need to do something like:
<!-- my main.pt is as follows --> <span tal:define="global length python:23"> <metal:block tal:replace="structure here/nested.pt"/> </span>
<!-- and nested.pt looks like this --> <b tal:content="length|string:nothing was passed down"/>
For whatever reason, even the global declaration doesn't seem to pass the value on down to nested.pt (my understanding of scoping is obviously flawed :).
Thanks, Roy.
__________________________________ Do you Yahoo!? Yahoo! Movies - Buy advance tickets for 'Shrek 2' http://movies.yahoo.com/showtimes/movie?mid=1808405861
_______________________________________________ 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 )
Roy Mathew wrote:
Folks,
Does anyone know if there is a way to pass arguments from a Page Template to another? The only way I can think of is to use SESSION to hold the values, and this seems clunky as I am then forced to remove those arguments from SESSION after.
I need to do something like:
<!-- my main.pt is as follows --> <span tal:define="global length python:23"> <metal:block tal:replace="structure here/nested.pt"/> </span>
<!-- and nested.pt looks like this --> <b tal:content="length|string:nothing was passed down"/>
Either you define a macro in nested.pt and use that, or you can call nested.pt with options: <span tal:define="length python:23"> <metal:block tal:replace="structure python: here['nested.pt'](length=length)"/> </span> In nested.pt you can refer it with 'options/length'. HTH Tonico
participants (3)
-
Dragos Chirila -
Roy Mathew -
Tonico Strasser