【问题标题】:How can I pass a value into my Flask Form如何将值传递到我的 Flask 表单中
【发布时间】:2020-09-27 12:35:14
【问题描述】:

我是 Flask 的新手。我一直在看各种教程,但我看到的唯一一个看起来应该有效的东西却没有。

我有一个表单类:

class CreateKardForm(FlaskForm):
kardTitle = StringField('Title')
contentText = TextAreaField('Content', [InputRequired(message="You must fill in some text.")])
keywords = StringField('Keywords', [InputRequired(message="Please enter at least one keyword. Separate keywords with commas.")])
createDate = DateField('Creation Date')
modifiedDate = DateField('Last Modified Date')
submit = SubmitField('Save')

还有一个html文件:

<!DOCTYPE html>
<html lang="en">
{% extends "formbase.html" %}
{% block content %}
<div class="formwrapper>
    <h1>Create a New IdxKard</h1>
    <form action="" method="post" novalidate>
        {{ form.hidden_tag() }}
        ...
        <p>
            {{ form.createDate.label }}<br>
            {{ form.createDate }}
        </p>
        <p>
            {{ form.modifiedDate.label }}<br>
            {{ form.modifiedDate }}
        </p>
        <p>{{ form.submit() }}</p>
    </form>

</html>

{% endblock %}
</html>

还有一条路线:

@app.route('/createKard', methods=['GET', 'POST'])
def createKard():
    print('In createKard')
    creationDate = datetime.now()
    print('creationDate=', creationDate)
    form = forms.CreateKardForm()

    if form.validate_on_submit():
        print('In createKard in main')

        title = request.form['kardTitle']
        content = request.form['contentText']
        keywords = request.form['keywords']
        createDate = request.form['createDate']
        modifiedDate = request.form['modifiedDate']

        # do stuff

    return render_template('createKard.html', createDate=creationDate, form=form)

我希望该 creationDate 在加载时显示在表单中,但它没有。我怀疑我仍然不清楚到底发生了什么。我认为因为用户还没有点击提交按钮,所以返回的 render_template 应该显示 HTML 并传入 createDate。当用户确实点击提交时,validate_on_submit 为真,其余代码将运行。最重要的是,如何将值传递到表单中以便显示?

【问题讨论】:

  • 经过验证的表单中的数据通常这样检索:title = form.kardTitle.data
  • @VPfB - 谢谢!我会做出改变。
  • 我不知道这是否是您的实际代码,但请注意缩进错误
  • @monsieuralfonse64 我在此处复制代码时遇到了一些缩进错误。谢谢你让我知道。我想我没问题,但会仔细检查。

标签: python flask flask-wtforms


【解决方案1】:

在将CreateKardForm 的实例传递给render_template 之前,您必须设置它的createDate.data

@app.route('/createKard', methods=['GET', 'POST'])
def createKard():
    print('In createKard')
    creationDate = datetime.now()
    print('creationDate=', creationDate)
    form = forms.CreateKardForm()
    form.createDate.data = creationDate  # pre-populate the form
    
    # ...

    return render_template('createKard.html', createDate=creationDate, form=form)

结果如下:

【讨论】:

  • 谢谢!我认为它必须是直截了当的,但我看到的所有东西都没有尝试执行此功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多