2013-06-19 11 views
9

Jak mówi tytuł, oto co mam:Jak iteracyjne WTForms FieldList z Jinja2

form = F(obj = myobject) 
myfieldlist= FieldList(FormField(form)) 

{% for subfield in form.myfieldlist %} 
    {{ subfield.field }} 
    {{ subfield.label }} 
{% endfor %} 

Ten wysyła nic, jakieś pomysły? Ponadto, nie do końca pewne, czy FormField jest wymagany. Dzięki

Odpowiedz

14

FormField zajmuje klasę nie instancją:

class GuestForm(Form): 
    email = TextField() 
    vip = BooleanField() 

class VenueForm(Form): 
    name = TextField() 
    guests = FieldList(FormField(GuestForm)) 

Następnie w kontrolerze:

form = VenueForm(obj=myobject) 
render("template-name.html", form=form) 

W szablonie trzeba iteracyjne nad polem FieldList jak gdyby była to jego własna forma:

{% for guest_form in form.guests %} 
    <ul> 
    {% for subfield in guest_form %} 
    <li>{{ subfield.label }} {{ subfield }}</li> 
    {% endfor %} 
    </ul> 
{% endfor %} 
+4

@downvoter - czy możesz wyjaśnić, dlaczego cofasz głos, aby poprawić odpowiedź? –

+0

Witam, próbowałem używać twojego przykładu na stronie testowej i nie wyświetla żadnych pól. Czy jest jeszcze jeden krok do wyświetlenia pól w szablonie, które mogłem pominąć? – neilH

+0

Tak, potrzebny jest obiekt z właściwością 'guests' zawierającą listę z jednym lub większą liczbą obiektów o właściwościach' email' i 'vip'. Albo musisz dodać minimalną liczbę wpisów do 'FieldList' - tak, aby deklaracja właściwości' guest' Venue miała postać 'guest = FieldList (FormField (GuestForm), min_entries = 1)' jeśli chcesz przynajmniej jedno wejście. –