Python 如何处理form.non_字段_错误和form.errors?

Python 如何处理form.non_字段_错误和form.errors?,python,django,django-templates,Python,Django,Django Templates,我需要以不同的样式显示非字段错误和字段错误。所以我确实喜欢下面 {% 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">

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

{% 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 %}
但当存在无任何字段错误的非字段错误时,将显示这两个部分。 如果没有字段错误,如何仅显示非字段错误部分?

当存在表单错误(包括非字段错误)时,将触发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脆饼:

不要重新发明轮子

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

如果您确实希望在单个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 %}

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

我知道表单。错误包括非字段错误,如何在单个div标记中显示所有字段错误?但是,即使没有字段错误,也会显示第二个块……如果没有字段错误,我不需要显示第二个块,您是对的。我的答案实际上与你的问题相反。你想做一些具体的事情,但我认为这应该是视图中的逻辑,而不是模板中的逻辑。不幸的是,没有什么比form.field\u错误更好的了,你应该自己想一想。