如何使用 Flask-WTForms 以 DRY 方式创建重复的表单元素?
How can I create repetitive form elements in a DRY way with Flask-WTForms?
我有一个 WTForms 表单,我希望用户能够在其中上传最多 10 张图片,并为图片提供标题和致谢。目前我声明了所有 10 组字段,但这似乎是多余的。有没有办法创建具有动态名称的表单字段,以便我可以在循环中创建它们?
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...
您可以通过组合 FormField
with FieldList
:
来获得您想要的东西
class ImageForm(Form):
image = FileField('Upload')
caption = StringField('Caption')
credit = StringField('Credit')
class MyForm(Form):
images = FieldList(FormField(ImageForm), min_entries=10)
然后您可以通过 my_form_instance.images.entries
或遍历 my_form_instance.images
:
来访问单个 ImageForm
实例
for image in my_form_instance.images:
print(image.data['caption'], image.data['credit'])
我有一个 WTForms 表单,我希望用户能够在其中上传最多 10 张图片,并为图片提供标题和致谢。目前我声明了所有 10 组字段,但这似乎是多余的。有没有办法创建具有动态名称的表单字段,以便我可以在循环中创建它们?
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...
您可以通过组合 FormField
with FieldList
:
class ImageForm(Form):
image = FileField('Upload')
caption = StringField('Caption')
credit = StringField('Credit')
class MyForm(Form):
images = FieldList(FormField(ImageForm), min_entries=10)
然后您可以通过 my_form_instance.images.entries
或遍历 my_form_instance.images
:
ImageForm
实例
for image in my_form_instance.images:
print(image.data['caption'], image.data['credit'])