Custom template in z3c.form
come utilizzare dei template custom per un form costruito utilizzando la libreria z3c.form
Visto che non ho trovato molta documentazione lascio qui un piccolo esempio pratico di come utilizzare un template custom per una form costruita con z3c.form.
Immaginiamo ad esempio di voler creare un semplice form di ricerca:
Partiamo dalla nostra form con z3c.form:
class ISearchForm(Interface):
search = schema.TextLine(
title = _(u"Search"),
required = True,
description =u'',
)
class SearchForm(form.Form):
fields = field.Fields(ISearchForm)
ignoreContext = True
@button.buttonAndHandler(_(u'Search'))
def handleApply(self, action):
data, errors = self.extractData()
if errors:
self.status = _("Error")
return
self.results = data
Se non volessimo utilizzare un template custom potremo visualizzare la nostra form usando:
from plone.z3cform.layout import wrap_form SearchFormView = wrap_form(SearchForm)
Poi registriamo la nostra vista nel configure.zcml:
<browser:page
for="*"
name="search_form"
class=".searchform.SearchFormView"
permission="zope2.View"
/>
In questo caso la mia vista è indipendente da contesto e quindi ho specificato for="*". Nel caso voglia invece utilizzare un template custom dovrò fare:
from plone.z3cform.layout import FormWrapper
class SearchFormView(FormWrapper):
index = ViewPageTemplateFile('custom_search_form.pt')
form = esgraphfolderForm
def getData(self):
....
#self.form_instance è l'istanza della form e quindi dentro
#self.form_instance.results trovo i dati della form già validati
....
return data
Visto che la registrazione sul zcml non cambia, l'unica cosa che manca è la vista custom ('custom_search_form.pt'):
....
<div id="skel-contents">
<span tal:replace="structure view/contents" />
</div>
...
<div tal:repeat="result view/getData"></div>
....
Nel page template, view farà riferimento alla browserview che fa da wrapper alla form. Dentro contents ci saranno i widgets.
Spero che sia utile ... buon lavoro !
re: documentazione
è vero che esiste molta documentazione su z3c.form, ma di che tipo? Il problema è che spesso è orientata a dei Plone "power developer".
I doctest, pur essendo rigorosi e completi, non sono recepiti con la stessa semplicità di un tutorial comprensivo di esempi di codice python, costrutti zcml (spesso nei test i componenti vengono registrati con una registerAdapter ed un neofita seppur tecnico non sarà in grado facilmente di mettere nel proprio configure.zcml le cose giuste), istruzioni per il setup e immagini di esempio di quello che si ottiene.
re: documentazione
re: re: documentazione
Vedremo cosa si può fare :)
Eccomi!
Che dire, ti do tantissima ragione, sto facendo un sacco di fatica nel capire la filosofia e come funziona. Ad esempio, in questo caso, mi ero posto il semplice obiettivo di stampare i risultati della form. Però in giro ho trovato solo redirect o add form, o CRUD. Ma un semplice esempio del tipo "hai inserito i seguenti valori", manca :)
L'esempio qui sopra, ad esempio, mescola il template che mostra la form con quello che mostra i risultati (poiché è una form di ricerca, questa è cosa buona e giusta :P ).
Appena trovo qualcosa di interessante, posto qualcosa!
documentazione
qui c'è molta documentazione, assieme a molti pacchetti z3c.*