2016-06-14 7 views
2

У меня есть форма WTForms, где я хочу, чтобы пользователь мог загружать до 10 изображений, а также давать подписи и титры изображений. В настоящее время я объявляю все 10 наборов полей, но это кажется излишним. Есть ли способ создать поля формы с динамическими именами, чтобы я мог создавать их в цикле?Как создать повторяющиеся элементы формы сухим способом с помощью Flask-WTForms?

class MyForm(Form): 
    image1 = FileField('Upload') 
    image1_caption = StringField('Caption') 
    image1_credit = StringField('Credit') 
    image2 = FileField('Upload') 
    image2_caption = StringField('Caption') 
    image2_credit = StringField('Credit') 
    # ...through 10 images... 
+2

Я считаю, что вы ищете WTForms [полевые оболочки] (http://wtforms.simplecodes.com/docs/0.6/fields.html#field-e nclosures). – dirn

ответ

2

Вы можете получить то, что вы ищете, комбинируя FormField с FieldList:

class ImageForm(Form): 
    image = FileField('Upload') 
    caption = StringField('Caption') 
    credit = StringField('Credit') 

class MyForm(Form): 
    images = FieldList(FormField(ImageForm), min_entries=10) 

Вы можете получить доступ к отдельным ImageForm экземпляров либо через my_form_instance.images.entries или итерация my_form_instance.images:

for image in my_form_instance.images: 
    print(image.data['caption'], image.data['credit']) 
+0

Это прекрасно, спасибо! Приятно знать термины, которые мне нужны, и как их использовать. – Kristen