使用Flask-WTF在for循环中渲染字段错误

时间:2015-01-18 15:27:38

标签: python validation flask wtforms flask-wtforms

我想在模板中迭代表单的字段并显示包含以下错误的字段:

 {{ form.hidden_tag() }}
    {% for field in form if field.widget.input_type != 'hidden' %}
    {%  if form.errors.field %}
  <div class="has-error">  {{ field.label }}  {{ field(size=80, class_='form-control') }}</div>
    <span style="color: red;">{{ form.errors.field.0 }}</span>
    {% else %}
        {{ field.label }}  {{ field(size=80, class_='form-control') }}
        {% endif %}
    {% endfor %}

但是由于某些原因这不起作用 - 表单呈现但不显示错误。

我已经检查过解决方案hereand hereand also here,但这些都没有帮助。

有人可以建议如何修复我的表单以正确呈现错误吗?

1 个答案:

答案 0 :(得分:2)

问题在于使用form.errors.field。如果你有一个名为field的字段而不是任何其他名字,那么这只会在jinja中准确。

幸运的是,您已经在迭代字段,并且每个字段都有.errors属性,因此最短的解决方案是简单地使用该属性

您的代码应该类似于:

 {{ form.hidden_tag() }}
 {% for field in form if field.widget.input_type != 'hidden' %}
   {% if field.errors %}
     <div class="has-error">  {{ field.label }}  {{ field(size=80, class_='form-control') }}</div>
     <span style="color: red;">{% for error in field.errors %}{{ error }}{% if not loop.last %}<br />{% endif %}{% endfor %}</span>
   {% else %}
      {{ field.label }}  {{ field(size=80, class_='form-control') }}
   {% endif %}
 {% endfor %}