在Django表单中获取错误列表

37 投票
4 回答
55441 浏览
提问于 2025-04-15 17:50

我正在尝试在Django中创建一个表单。这个表单可以正常工作,但我希望所有的错误信息都显示在表单的顶部,而不是在每个有错误的字段旁边。我试着遍历form.errors,但它只显示了有错误的字段名称,而没有像“姓名是必填项”这样的错误信息。

这基本上是我希望在表单顶部使用的内容:

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

那么我应该在???那里用什么呢?它不是errors; 那个只会输出字段的名称。

4 个回答

7

丹尼的回答其实不是个好主意。这样做可能会导致出现一个叫做“值错误”的问题。

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

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

      {% endfor %}
{% endif %}
7

如果你想要一个简单的带条件的东西,可以这样做:

{% 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,它其实是一个很大的字典。

75

form.errors 是一个字典,也就是说它是一个用来存储错误信息的地方。当你写 {% for error in form.errors %} 时,error 代表的是字典里的一个键。

你可以尝试这样做:

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

等等。

撰写回答