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