获取Django表单中的错误列表

时间:2010-01-09 22:53:27

标签: python django django-templates django-forms

我正在尝试在Django中创建一个表单。这是有效的,但我希望所有错误都在表单的顶部,而不是在每个有错误的字段旁边。我尝试在form.errors上循环,但它只显示有错误的字段的名称,而不是错误消息,例如“名称是必需的。”

这就是我希望能够在表单顶部使用的内容:

{% if form.??? %}
    <ul class="errorlist">
    {% for error in form.??? %}
        <li>{{ error }}</li>
    {% endfor %}
    </ul>
{% endif %}

我会在???使用什么?这不是errors;只输出字段的名称。

4 个答案:

答案 0 :(得分:56)

form.errors是一本字典。当您执行{% for error in form.errors %}时,错误对应于密钥。

而是尝试

{% for field, errors in form.errors.items %}
    {% for error in errors %}
...

答案 1 :(得分:2)

如果你想要一个简单的条件采取这种方式:

{% if form.errors %}
  <ul>
    {% for error in form.errors %} 
      <li>{{ error }}</li>
    {% endfor %}
  </ul>
{% endif %}  

如果您想了解更多信息并查看字段的名称和错误,请执行以下操作:

{% if form.errors %}
  <ul>
    {% for key,value in form.errors.items %} 
      <li>{{ key|escape }} : {{ value|escape }}</li>
    {% endfor %}
  </ul>
{% endif %}

如果你想了解form.errors是一本很大的词典。

答案 2 :(得分:1)

您可以使用以下代码:

{% if form.errors %}
    {% for field in form %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}

    {% for error in form.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}

{% endif %}

此添加https://docs.djangoproject.com/en/3.0/ref/forms/api/#django.forms.Form.non_field_error

答案 3 :(得分:0)

丹尼斯的答案不是一个好主意。您可以获得ValueError。

  

检查。

       {% if form.errors %}
            {% for field in form %}
                {% for error in field.errors %}
                     {{field.label}}: {{ error|escape }}
                {% endfor %}
            {% endfor %}
            {% for error in form.non_field_errors %}
                 {{field.label}}: {{ error|escape }}
            {% endfor %}
        {% endif %}