[Zope] Using DTMLFile or PageTemplateFile in methods
Dieter Maurer
dieter@handshake.de
Fri, 20 Jul 2001 21:15:22 +0200 (CEST)
Peter Bengtsson writes:
> I use ZPT files for my templates for my Python product development.
> This is what I do:
>
> def manage_addInstance(self,id):
> self._setObject(id, Instance(id))
>
> class Instance(SimpleItem):
> def __init__(self,id):
> self.id = id
> # in the products folder there is a file called index.zpt
> index_html = PageTemplateFile('index', globals())
>
> Now, this works, but consider the following extension to the class.
>
> class Instance(SimpleItem):
> def __init__(self,id):
> self.id = id
> def which_index_html(self):
> return PageTemplateFile('index', globals())
>
> index_html = which_index_html
>
> That does NOT work! It looks like a small change, but I might be wrong.
> How to do this anyone?
The second approach need an additional "call".
ZPublisher is ready to call the "index_html" once.
In the first case, this calles in fact the PageTemplate
and back comes the rendered template.
In the second case, ZPublisher again calls "index_html"
but the result is the PageTemplate itself, and not
the rendered result.
Use:
def which_index_html(self):
return PageTemplateFile('index', globals())()
i.e. "call" the PageTemplate!
Dieter