如何处理form.non_field_errors和form.errors?

时间:2014-11-13 09:43:09

标签: python django django-templates

我需要以不同的样式显示non_field_errors和字段错误。所以我喜欢下面的

{% if form.non_field_errors %}
   <div class="alert alert-danger" role="alert">
   {{ form.non_field_errors }}
   </div>
{% endif %}

{% if form.errors %}
   <div class="alert alert-info" role="alert">
       {% for field in form %}
          {% if field.errors %}
              {{ field.errors| striptags }}
          {% endif %}
       {% endfor %}
   </div>
{% endif %}

但是当存在没有任何字段错误的非字段错误时,将显示这两个部分。 如果没有字段错误,如何仅显示非字段错误部分?

1 个答案:

答案 0 :(得分:0)

当存在表单错误(包括非字段错误)时,会触发if条件{% if form.errors %}

也许您可以将第二个块转换为for循环并将if条件放在:

{% for field in form %}
    {% if field.errors %}
        <div class="alert alert-info" role="alert">
             {{ field.errors }}
        </div>
    {% endif %}
    {{ field }}
{% endfor %}

这只是一个非常简单的例子。您可以根据自己的需要进行扩展和调整。

编辑:

更好的解决方案是使用django-crispy-forms:

http://django-crispy-forms.readthedocs.org/en/latest/

不要重新发明轮子!

编辑:回答下面的第一条评论

如果您真的想在单个DIV中显示所有字段错误,无论出于何种原因,您最终都可以写:

{% if form.errors %}
    {# first block #}
    {% if form.non_field_errors %}
        {# your logic #}
    {% endif %}
    {# second block #}
    <div class="alert alert-info" role="alert">
        {% for field in form %}
            {{ field.errors }}
            {# your logic #}
        {% endfor %}
    </div>
{% endif %}

因此,如果只有字段错误,则不会显示非字段错误块。