2013-06-19 26 views
9

Như tiêu đề nói, đây là những gì tôi đã có:Làm thế nào để lặp WTForms FieldList với Jinja2

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

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

này kết quả đầu ra không có gì, bất kỳ ý tưởng? Ngoài ra, không hoàn toàn chắc chắn nếu FormField là bắt buộc. Cảm ơn

Trả lời

14

FormField mất một lớp không phải là một ví dụ:

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

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

Sau đó, trong điều khiển của bạn:

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

Trong mẫu của bạn, bạn sẽ cần phải lặp qua các lĩnh vực FieldList như thể nó là biểu mẫu của riêng nó:

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

@downvoter - bạn có thể giải thích lý do tại sao bạn downvoted vì vậy tôi có thể cải thiện câu trả lời? –

+0

Xin chào, tôi đã thử sử dụng ví dụ của bạn trong một trang thử nghiệm và nó không hiển thị bất kỳ trường nào. Có một bước khác để hiển thị các trường trong mẫu mà tôi có thể đã bỏ sót không? – neilH

+0

Có, bạn cần một đối tượng có thuộc tính 'khách' chứa danh sách với một hoặc nhiều đối tượng có thuộc tính' email' và 'vip'. Hoặc là bạn cần thêm số lượng mục nhập tối thiểu vào 'FieldList' - vì vậy khai báo thuộc tính' guests' của 'VenueForm' sẽ trở thành' khách = FieldList (FormField (GuestForm), min_entries = 1) 'nếu bạn muốn ít nhất một mục. –

Các vấn đề liên quan