【问题标题】:Flask WTForms MultipleFileFieldFlask WTForms MultipleFileField
【发布时间】:2021-09-03 03:17:27
【问题描述】:

我正在尝试通过 WTForm 保存多个文件。由于没有关于如何使用 MultipleFileField 的文档,我查看了 SO 并遇到了多个答案。 This 一个看起来很有希望,但它不起作用。 file 变量是一个字符串,因此代码不起作用。

class CreatePostForm(FlaskForm):
    files = MultipleFileField('Upload files', validators={DataRequired()})
    submit = SubmitField(_l('Submit'))
@app.route('/create_post', methods=['GET', 'POST'])
@login_required
def create_post():
    form = CreatePostForm()
    if form.validate_on_submit():
        files_filenames = []
        for file in form.files.data:
            file_filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], file_filename))
            files_filenames.append(file_filename)
        return redirect(url_for('index'))
    return render_template('create_post.html', form=form)

【问题讨论】:

  • 你的表单有enctype = "multipart/form-data"属性吗?
  • 它没有,我认为它会在表单中使用 MultipleFileField 时自动添加。
  • 我不确定,WTF 可以根据需要创建表单字段,但您仍应在页面中添加
    标签。 - 见:pythonhosted.org/Flask-WTF/form.html(这是 Flask 版本,但应该同样相关)。如果有疑问,请在浏览器中查看生成的 HTML 源代码。

标签: python flask flask-wtforms wtforms


【解决方案1】:

原来 MultipleFileField 没有将 enctype="multipart/form-data" 属性添加到 html 表单。您必须手动完成此操作。

所以上面的代码适用于这个 html 页面。

<form action="" method="post" class="form" role="form" enctype="multipart/form-data">
{{ wtf.quick_form(form) }}
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2018-03-21
    • 1970-01-01
    • 2021-03-04
    • 2014-04-13
    相关资源
    最近更新 更多