Page-Template-Datei in der Zope3-View-Klasse ändern
Wenn man eine Page unterschiedliche Templates anzeigen haben soll, kann man das im ZCML festgelegte Template in der View-Klasse überschreiben.
Wenn man in Abhängigkeint von bestimmten Zustandsvariablen (z. B.
Nutzereingaben oder Nutzerrechte) unterschiedliche Page-Templates anzeigen will, es aber nicht
möglich oder erwünscht ist, einen Redirect zu machen, kann man das zu
im Code der View-Klasse statt der Page-Template-Datei, die per ZCML festgelegt wurde, eine andere benutzen.
Das
muss natürlich passieren bevor das Template gerendert wird. Das geschieht beim Aufruf der Methode von __call__. Also überschreibt man diese Methode und
ändert das Template vor dem Rendern.
from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile, BoundPageTemplate
class MyView(object):
"""Meine View Klasse"""
def __call__(self, *args, **kw):
if irgendeineBedingung:
# wenn Bedingung zutrifft, anderes template verwenden als in configure.zcml angeben
self.index = BoundPageTemplate(
ViewPageTemplateFile('anderesTemplate.pt'), self)
# Überschriebene __call__-Methode aufrufen zum Rendern des Templates.
return super(MyView, self).__call__(*args, **kw)
ViewPageTemplateFile kann als Argument einen relativen Pfad (ausgehend von dem Verzeichnis in dem die View-Klasse liegt) oder einen absoluten Pfad erhalten.
- Category(s)
- Zope 3
- The URL to Trackback this entry is:
- http://blog.gocept.com/page-template-datei-in-der-view-klasse-aendern/tbping