我已刷新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>
答案 0 :(得分:4)
forms.errors
被触发,但是最后,您在呈现视图之前声明了一个新表单form = UserCreationForm()
。
在检查form
是否有效之后,您所有的验证错误都位于form
实例中,请记住进程按顺序运行,最后销毁变量form
与form = UserCreationForm()
,因此不再有验证错误。
您可以做的是,当您的请求方法为form = UserCreationForm()
时,将此新表单GET
添加到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) else: form = UserCreationForm() return render(request, 'registration/register.html', {'form': form})
,其中 s 不是form.errors
form.error