【问题标题】:Django access form errors excluding non_field_errors in templateDjango 访问表单错误,不包括模板中的 non_field_errors
【发布时间】:2018-07-04 12:07:01
【问题描述】:

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

{{ form.errors }}

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

我想单独显示这些特殊错误,所以我尝试循环遍历字典并检查密钥是否存在:

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

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

问题:是否有一种内置方法可以访问(并可能打印)标准字段错误并单独访问 non_field_errors?

解决方案 这是建立在 Daniel Roseman 的 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 %}

【问题讨论】:

    标签: python django forms django-templates


    【解决方案1】:

    您可以遍历字段并访问它们的错误:

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

    【讨论】:

    • 应该是 {{ field.errors }} 而不是 {% field.errors %} 。 :)
    猜你喜欢
    • 2012-01-09
    • 2010-10-25
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2011-05-28
    • 2013-11-25
    • 1970-01-01
    • 2011-03-12
    相关资源
    最近更新 更多