django 表单错误消息未显示
Posted
技术标签:
【中文标题】django 表单错误消息未显示【英文标题】:django form error messages not showing 【发布时间】:2013-09-27 14:40:12 【问题描述】:所以我有我的看法:
def home_page(request):
form = UsersForm()
if request.method == "POST":
form = UsersForm(request.POST)
if form.is_valid():
form.save()
c =
c.update(csrf(request))
c.update('form':form)
return render_to_response('home_page.html', c)
我的表单.py:
class UsersForm(forms.ModelForm):
class Meta:
model = Users
widgets = 'password':forms.PasswordInput()
def __init__(self, *args, **kwargs):
super( UsersForm, self ).__init__(*args, **kwargs)
self.fields[ 'first_name' ].widget.attrs[ 'placeholder' ]="First Name"
self.fields[ 'last_name' ].widget.attrs[ 'placeholder' ]="Last Name"
self.fields[ 'password' ].widget.attrs[ 'placeholder' ]="Password"
还有我的模板:
<html>
<body>
<form method="post" action="">% csrf_token %
form.first_name form.last_name <br>
form.password <br>
<input type="submit" value="Submit Form"/>
</form>
% if form.errors %
% for field in form %
% for error in field.errors %
<p> errors </p>
% endfor %
% endfor %
% for error in form.non_field_errors %
<p> error </p>
% endfor %
% endif %
</body>
</html>
现在,请记住,在我拆分表单字段之前,我的表单看起来像这样:
<form method="post" action="">% csrf_token %
form
<input type="submit" value="Submit Form"/>
</form>
如果表单有问题(例如缺少某个字段),它会自动给出错误消息。在我拆分模板中的表单字段(使 form.first_name 、 form.last_name 和 form.password 成为它们自己的部分)后,它停止自动提供错误消息。这是正常的吗?
但主要问题是,如果有错误消息,我的 if form.errors 语句为什么不起作用/显示错误消息?例如,如果我故意不填写表单中的字段并单击提交,则数据库不会获得更新(这是一件好事),但不会给出任何错误消息。知道为什么吗?
我还尝试删除 forms.non_field_errors 并尝试仅返回字段错误,如下所示:
% if form.errors %
% for field in form %
% for error in field.errors %
<p> errors </p>
% endfor %
% endfor %
% endif %
但还是不行。
【问题讨论】:
你能修复视图方法中的缩进并准确显示视图代码的外观吗? 哎呀,好了,刚刚修好了。 同时检查内部 form.non_field_errors
。把它放在% if form.errors %
外面。 Example.
嗯好吧,我完全删除了 forms.non_field_errors ,但它仍然无法正常工作。我更新了帖子并展示了我的尝试。
@user2719875 删除它不是我的意思,但很高兴看到它已解决。不过,放回非字段错误。将其放回 if 块之外。可能会派上用场。
【参考方案1】:
像这样在views.py中添加这个sn-ps
if request.method == "POST":
fm = UserRegsitrationForm(request.POST)
if fm.is_valid():
fm.save()
else:
fm = UserRegsitrationForm()
context = 'fm':fm
return render(request,'registration.html',context)
【讨论】:
请解释你的代码是做什么的以及它是怎么做的。 如果您的表单是有效的,它只会保存表单,否则它将转到 else 部分并返回错误的表单。【参考方案2】:错误捕获很可能通过以下方式完成:
% for field in form %
field.errors
% endfor %
【讨论】:
【参考方案3】:如果 is_valid() 不正确,您必须再次发送表单上下文,
if form.is_valid():
return redirect('/user/contact/')
else:
return render(request, 'users/contact.html', context='form': form)
因为您的错误将显示在您的表单中 else: 会返回 ValueError
【讨论】:
【参考方案4】:我发现了错误(错字)。
sn-p 应该是:
% if form.errors %
% for field in form %
% for error in field.errors %
<p> error </p>
% endfor %
% endfor %
% endif %
我有errors
而不是error
。
【讨论】:
以上是关于django 表单错误消息未显示的主要内容,如果未能解决你的问题,请参考以下文章