Flask 中的表单错误时不会闪烁消息

Messages are not being flashed when form errors in Flask

我已经编辑了我的问题以使其更清楚。 当我验证我的表单并且它有错误时,我闪现了我的消息,但这并没有最终呈现在我的模板中:

@app.route('doit', methods=["GET", "POST"])
def doit():
    form = MyForm()
    if form.validate_on_submit():
        flash('success')
    else:
        if form.errors:
            print "You've got errors!"
            flash('You have some errors')
            print session['_flashes']

    return render_template('test.html')

我的消息显示模板:

{% with messages = get_flashed_messages() %}
    {{ messages }}
    <br/>
    {{ session }}
{% endwith %}

当我提交有错误的表单时,我闪烁 flash("You have some errors"),当我将会话打印到控制台时,我确实看到 _flashes 在会话中包含我的错误消息:

# my console output
You've got errors!
[('message', 'You have some errors')]

但是,当模板呈现时,{{ session }} 根本没有 _flashes,因此 get_flashed_messages() 始终是一个空列表。结果没有消息闪烁。

我做错了什么?

函数 get_flashed_messages() returns 一个列表,您应该对其进行迭代并打印出其中的消息,如下所示:

{% with messages = get_flashed_messages() %}
    {% if messages %}
    <ul>
    {% for message in messages %}
         <li>{{ message }}</li>
    {% endfor %}
    </ul>
    {% else %}
     No messages.
    {% endif %}
{% endwith %}

好吧伙计们,我(又)有点傻了。原来表单是通过 AJAX 发布的,但调用的结果是期待 JSON 格式而不是整个 HTML 模板。

我已经改为返回 json 响应,现在没问题了。