我想为表单字段中的错误设置变量err
(使用 django 2.1.3 ):
{% for field in form %}
{% if field.errors %}
{% with field.errors as err %}{% endwith %}
{% endif %}
{% endfor %}
{% if err %}
<div class="alert alert-danger fade show">
<button type="button" class="close" data-dismiss="alert"
aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ err }}
</div>
{% endif %}
但是,当渲染为html时,变量的值没有输出。不过,有些错误是我使用forms.ValidationError
引发的。
也可以像这样尝试...
{% for field in form %}
{% if field.errors %}
<div ... >
...
...
{{ field.errors }}
</div>
{% endif %}
{% endfor %}
在这种情况下,将显示输出或错误,但是包含多个<div>
元素且 n 否。时代。
我知道,这可以通过views.py
中的另一种方式来完成:使用'django.contrib.messages'。然后将错误发送到form.is_valid()
内的 messages.error(),然后...
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
但是,我想从forms.py
文件中对其进行操作。那么,我该怎么做呢?
️️️️
提前谢谢!
答案 0 :(得分:1)
with
语句的作用域直到匹配的endwith
为止。您的宽度是在with之后,因此该变量根本不存在。
即使可行,您仍然只定义了一个err
;如果存在多个错误,则仅具有最后一个错误的值,这会破坏您要尝试执行的操作的全部目的。
您不应为此使用contrib.messages。您应该使用 form 中的错误,而不是字段中的错误。
{% if form.errors %}
<div ... >
...
...
{% for error in form.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
请注意,您可以通过定义ErrorList subclass来进一步自定义错误的显示方式。