Falls die übliche Verwendung von Widgets nicht ausreicht, können auch spezifische Widgets verwendet werden, die eine größere Kontrolle über die Ausgabe erlauben.
Als Beispiel verwenden wir die View
-Klasse aus Views, die wir jedoch diesmal von plone.directives.dexterity.DisplayForm
ableiten:
class View(dexterity.DisplayForm):
grok.context(ISession)
grok.require('zope2.View')
Hierdurch erhalten wir einige zusätzliche Eigenschaften, die wir in unserem Template verwenden können:
view.w
ist ein Dictionary aller Display-Widgets.
Als Schlüssel für diese Widgets wird der Feldname verwendet oder, sofern das Feld aus einem Behavior kommt, wird dem Feldnamen das Interface dieses Behavior vorangestellt
view.widgets
enthalten eine Liste von Widgets in der Reihenfolge des Standard-Fieldset
view.groups
enthält eine Liste von Fieldsets
view.fieldsets
enthält ein Distionary, das Fieldset-Namen Fieldsets zuweist.
Auf einen Fieldset (group) können alle dort verfügbaren Widgets aufgelistet werden.
In project_templates/view.pt
kann dann z.B.:
<div tal:content="structure context/details/output" />
ersetzt werden durch:
<div tal:content="structure view/w/details/render" />