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" />