我有一个包含姓名和图片的表单
MyForm的:
name = TextField(
u'name',
validators=[
validators.DataRequired(),
validators.Length(min=1, max=25)
]
)
pictures = FileField(
u'pictures',
validators=[
FileRequired(),
FileAllowed(['jpg', 'png'], 'Images only!')
]
)
Jinja2模板:
{% from "_form_helpers.tpl" import render_field %}
<form method="post" action="" enctype="multipart/form-data">
<dl>
{{ render_field(form.name) }}
{{ render_field(form.pictures) }}
</dl>
<p>{{ form.submit }}
</form>
我想在一个字段中上传一张或多张图片(多选)。
怎么做?
谢谢..
答案 0 :(得分:6)
您需要为输入标记指定multiple属性。这可以在您的模板中完成,如下所示:
form.pictures(multiple="")
这将导致您生成的html允许多个文件选择:
<input id="pictures" multiple name="pictures" type="file">
images = request.files.getlist("pictures")
if images:
for img in images:
# Create Images
file_name = str(uuid.uuid4()) + secure_filename(img.filename)
image_file = os.path.join(app.config['UPLOAD_FOLDER'], file_name)
img.save(image_file)
# Save record
image = models.Image(record_id=record.record_id,
file_name=file_name.encode('utf-8'))
db.session.add(image)
db.session.commit()
答案 1 :(得分:4)
来自:http://wtforms.readthedocs.org/en/latest/fields.html
render_kw (字典) - 如果提供,则提供默认的字典 将在渲染时提供给窗口小部件的关键字。
因此,您可以将{multiple: True}
传递给字段定义,如下所示:
<强> forms.py 强>
class UploadImages(Form):
imgs = FileField(
'Select images',
render_kw={'multiple': True},
)
upload = SubmitField('Upload')
<强> uploade_template.html 强>
{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}
答案 2 :(得分:1)
自2.2版以来,wtforms支持MultipleFileField
。 (摘自https://wtforms.readthedocs.io/en/stable/changes.html#version-2-2)