我用烧瓶创建了一个非常简单的登录表单
email = StringField('E-Mail:', validators=[validators.DataRequired(message='E-mail needed.'), validators.email(u'Provide e-mail.')])
password = StringField('Password:', [validators.required(u'Password can't be empty.')])
以及将在模板内创建表单的宏:
{% macro render_field(field) %}
<fieldset>
<div class="form-group">
{{ field(**kwargs) | safe }}
</div>
</fieldset>
{% endmacro %}
如您所见,这是非常简单的形式。在烧瓶教程中,它显示了各个字段的验证错误。但是我只想一次在表单顶部显示它们。
这是我的模板:
<div class="panel-body">
{% if loginForm.errors %}
<div class="alert alert-danger">
<ul>
{% for error in loginForm.errors %}
<li>{{ loginForm.errors[error] }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<form role="form" method="post" action="{{ url_for('login') }}">
{% from "_formhelper.html" import render_field %}
<fieldset>
{{ render_field(loginForm.email, class="form-control", placeholder="E-Mail") }}
{{ render_field(loginForm.password, class="form-control", placeholder="Password") }}
<button class="btn btn-lg btn-success btn-block">Login</button>
</fieldset>
</form>
</div>
如您所见,我将我的错误部分放在表单顶部。但当我发布了一个空表格,它显示如下错误消息:
['密码不能为空'],而不是密码不能为空
为什么它在消息的开头和结尾处加上方括号和单个配额?我不知道。
我知道这是一个古老的问题,但是如果其他人有这个问题,您可以通过为消息添加for循环来解决它,如下所示:
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-warning my-5">
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endwith %}