Django访问表单错误,排除模板中的non_field_errors

时间:2018-01-25 09:28:47

标签: python django forms django-templates

在django模板中,我想在表单顶部显示所有表单错误, 最简单的方法就是这样做:

{{ form.errors }}

问题是,这也会显示form.non_field_errors,这些是form.errors['__all__']中包含的条目。

我想分别显示这些特殊错误,所以我试图遍历dict并检查密钥是否存在:

{% for err in form.errors %}
  {% if not err.__all__ %}
    {# print error #}
  {% endif %}
{% endfor %}

但显然这是不可能的,因为在模板中我们无法访问以下划线(doc)开头的字典键。

问题:是否有内置方式来访问(并可能打印)标准字段错误,并单独使用non_field_errors?

解决方案 这是建立在丹尼尔罗斯曼的answer

之上
{% if form.errors %}
    <div class="ui error icon message">
        <ul>
            {% if form.non_field_errors %}
                {% for error in form.non_field_errors %}
                    <li>{{ error|escape }}</li>
                {% endfor %}
            {% endif %}

            {% for field in form %}
                {% if field.errors %}
                    <li> {{ field.name }}
                        <ul>
                            {% for error in field.errors %}
                                <li>{{ error|escape }}</li>
                            {% endfor %}
                        </ul>
                    </li>
                {% endif %}
            {% endfor %}
        </ul>
    </div>
{% endif %}

1 个答案:

答案 0 :(得分:3)

您可以遍历字段并访问其错误:

{% for field in form %}
    {% field.errors %}
{% endfor %}