我正在尝试在 Django 中创建一个表单。这一切都有效,但我希望所有错误都位于表单的顶部,而不是位于每个有错误的字段旁边。我尝试循环 form.errors,但它只显示有错误的字段的名称,而不显示诸如“名称为必填项”之类的错误消息。
这几乎是我希望能够在表单顶部使用的内容:
{% if form.??? %}
<ul class="errorlist">
{% for error in form.??? %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
我在那里用
???
做什么?这不是errors
;只输出字段的名称。
form.errors 是一个字典。当您执行
{% for error in form.errors %}
时,错误对应于该键。
不如尝试
{% for field, errors in form.errors.items %}
{% for error in errors %}
...
等等
丹尼斯的回答不是一个好主意。您可能会收到 ValueError。
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
{{field.label}}: {{ error|escape }}
{% endfor %}
{% endfor %}
{% endif %}
如果你想要一些简单的有条件的东西,请采取这种方式:
{% 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
是一本大字典。
您可以使用此代码:
{% 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