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.

by Michael Howitz posted at 2006-01-30 11:17 last modified 2006-01-30 11:17

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