Still not working! It was:: index_html = PageTemplateFile('index', globals()) which was working fine I tried:: def index_html(self): " " return "<html>hello</html>" which also worked. Then I tried:: def index_html(self): " " # 'simple' only contains "<html>hello</html>" return PageTemplateFile('simple', globals()) which caused a NotFound supposedly meaning that the index_html was "broken". I also tried your advice:: def index_html(self): " " # 'simple' only contains "<html>hello</html>" # call, call the PageTemplateFile() so that it returns HTML, not object return PageTemplateFile('simple', globals()) () which gives me this error: Error Type: AttributeError Error Value: 'string' object has no attribute 'other' File C:\Program Files\zope\lib\python\Shared\DC\Scripts\Bindings.py, line 351, in _bindAndExec (Object: simple) File <string>, line 1, in ? File C:\Program Files\zope\lib\python\Shared\DC\Scripts\Bindings.py, line 304, in _getTraverseSubpath (Object: simple) AttributeError: (see above) Bare in mind that 'simple.zpt' contains only <html>hello</html> and works fine the static way. If this is a bug or can't be done easily, I'm going to have to use my .zpt files to create ZPT instances in Zope instead.
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