获取 Django 表单中的错误列表

问题描述 投票:0回答:5

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

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

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

我在那里用

???
做什么?这不是
errors
;只输出字段的名称。

python django django-templates django-forms
5个回答
75
投票

form.errors 是一个字典。当您执行

{% for error in form.errors %}
时,错误对应于该键。

不如尝试

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

等等


7
投票

丹尼斯的回答不是一个好主意。您可能会收到 ValueError。

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

           {% for error in field.errors %}
                {{field.label}}: {{ error|escape }}
           {% endfor %}

      {% endfor %}
{% endif %}

6
投票

如果你想要一些简单的有条件的东西,请采取这种方式:

{% 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
是一本大字典。


3
投票

您可以使用此代码:

{% 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


0
投票

我的错误消息显示在页面顶部,但消息也变得重复,这意味着它们也显示在各个字段旁边

  {% if form.errors %}
        {% for field, errors in form.errors.items %}
        <ul class="messages w3-red">
            {% for error in errors %}
            <li> {{ error }} </li>
            {% endfor %}
        </ul>
        {% endfor %}
        {% endif %}

© www.soinside.com 2019 - 2024. All rights reserved.