Flask方括号和单个配额一次显示所有验证消息

时间:2017-07-13 20:59:17

标签: python forms flask wtforms

我创建了一个非常简单的带烧瓶的登录表单

    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>

如您所见,我将错误部分放在表单的顶部。但当 我发布空表单,它会显示如下错误消息:

['密码不能为空']而不是密码不能为空

为什么它会附加方括号和单个配额,邮件的开头和结尾?我不知道。

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但是如果其他人有此问题,则可以通过为消息添加for循环来解决它,如下所示:

{% with messages = get_flashed_messages() %}
      {% if messages %}
        {% for message in messages %}
        <div class="alert alert-warning my-5">
            {{ message }}
        </div>
        {% endfor %}
      {% endif %}
    {% endwith %}