Django form.errors 未显示在模板中
Posted
技术标签:
【中文标题】Django form.errors 未显示在模板中【英文标题】:Django form.errors not showing up in template 【发布时间】:2018-12-11 06:27:00 【问题描述】:我已引用this *** 页面并尝试在 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 %
正如 *** 问题中所说,我也尝试过简单地做:
% 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&#39;t match.</li></ul></li></ul>
【问题讨论】:
【参考方案1】:forms.errors
启动了,但最后,您在渲染视图之前声明了一个新表单 form = UserCreationForm()
。
在检查form
是否有效后,你所有的验证错误都在form
实例中,记住进程按顺序运行,最后,你销毁变量form
使用form = UserCreationForm()
所以不再有验证错误。
当您的请求方法为 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)
else:
form = UserCreationForm()
return render(request, 'registration/register.html', 'form': form)
注意,模板中form errors的正确调用是
form.errors
,s不是form.error
<s>% if form.error %</s> <b>% if form.errors %</b>
【讨论】:
我应该为 post 和 get 请求创建 1 个表单吗? 通常是的,但还有很多其他方法。当请求为 POST 时,您创建一个带有request.POST
的表单,当它是 GET 时创建一个空表单以上是关于Django form.errors 未显示在模板中的主要内容,如果未能解决你的问题,请参考以下文章