我已经引用了this stackoverflow 页面并试图在 html 模板上显示我的表单错误。 我做了:
{% if form.error %}
{% 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 %}
正如在 stackoverflow 问题中所说,我也尝试简单地做:
{% if form.error %}
This should pop up if there is an error
{% endif %}
无论如何都没有出现: 这是我的 view.py 代码:
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password2')
user = authenticate(username=username, password=password)
login(request, user)
return HttpResponseRedirect('/')
else:
print(form.errors)
form = UserCreationForm()
return render(request, 'registration/register.html', {'form': form})
我能够将表单错误发送到 Django 控制台,但它拒绝显示在模板上。
打印 form.errors
打印到控制台:<li>password2<ul class="errorlist"><li>The two password fields didn't match.</li></ul></li></ul>
最佳答案
forms.errors
启动了,但最后,您在呈现 View 之前声明了一个新表单 form = UserCreationForm()
。
检查 form
是否有效后,所有的验证错误都在 form
实例中,记住进程按顺序运行,在最后,您使用 form = UserCreationForm()
销毁了变量 form
,因此不再有验证错误。
当您的请求方法是 GET
时,您可以将此新表单 form = UserCreationForm()
添加到 else 语句中,以继续拥有一个空的表格。通过添加 else
语句,您可以避免对表单进行新的赋值;在验证过程之后,它将跳转到render(request,....)
,form
实例包含所有验证错误
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password2')
user = authenticate(username=username, password=password)
login(request, user)
return HttpResponseRedirect('/')
else:
print(form.errors)
<b>else:</b>
<b>form = UserCreationForm()</b>
return render(request, 'registration/register.html', {'form': form})
Note, the correct call for form errors in templates is
form.errors
with s notform.error
<s>{% if form.error %}</s> <b>{% if form.errors %}</b>
关于python - Django form.errors 没有出现在模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51146120/