[英]Django UserCreationForm not rendering errors in template
我正在使用django的UserCreationForm来注册用户。 除错误外,它运行完美。 我无法渲染它们。 我认为模板没有任何问题,因为我已经尝试过使用最基本的模板并使用form.as_p和form.as_table,并且仍然可以进行注册,但是如果您在其中输入2个不同的密码,则会刷新屏幕上有一个空表格,没有错误。 我也尝试过通过django消息发送form.errors,当存在错误时它将传递正确的错误,但是这种解决方案对我来说不切实际。
由于缩进,它不会让我发布模板。 我在表单顶部使用{{form.non_field_errors}},然后使用{{form.email.error}}等。
如果可以的话请帮忙:)
表格类
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields=('username', 'email', 'password1', 'password2')
def save(self, commit=True):
User= super(MyRegistrationForm, self).save(commit=False)
User.email = self.cleaned_data["email"]
if commit:
User.save()
return User
查看方法...
def home(request):
args = {}
args.update(csrf(request))
if request.method =='POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
##save_it = form.save(commit=False)
form.save()
messages.success(request, 'Thank you for joining!')
#return HttpResponseRedirect('thank-you')
return render_to_response('thankyou.html', locals(), context_instance=RequestContext(request))
else:
args['form'] = MyRegistrationForm()
return render_to_response('signup.html', args, context_instance=RequestContext(request))
args={}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
context = RequestContext(request,
{'user': request.user})
return render_to_response('signup.html', args,
context_instance=context)
如果表单有错误,您将明确地重新创建该表单,并在上下文中将其替换为未绑定的表单,因此没有错误。 不要那样做 您的看法应该很简单:
def home(request):
if request.method =='POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'Thank you for joining!')
return HttpResponseRedirect('thank-you')
else:
form = MyRegistrationForm()
return render(request, 'signup.html', {'form': form})
注意其他更改:成功发布后始终重定向; render
而不是render_to_response,因为它会为您创建一个RequestContext; 不需要自己添加用户或csrf值,因为只要您确实使用RequestContext,它们就会由上下文处理器添加。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.