Django UserCreationForm 不呈现模板中的错误
Django UserCreationForm not rendering errors in template
我正在使用 django 的 UserCreationForm 注册用户。除了错误外,它工作得很好。我无法让他们渲染。我认为模板没有任何问题,因为我已经使用最基本的模板并使用 form.as_p 和 form.as_table 进行了尝试,注册仍然有效,但如果您输入 2 个不同的密码它只是用一个空的表单刷新屏幕并且没有错误。我还尝试通过 django 消息发送 form.errors,当出现错误时它会传递正确的错误,但此解决方案对我来说不实用。
它不会让我 post 因为缩进模板。我在用
{{form.non_field_errors}} 在表格顶部,然后是 {{ form.email.error }} 等
如果可以请帮忙:)
表格class..
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})
注意其他变化:总是 在成功后重定向 post; render
而不是 render_to_response,因为它为您创建了一个 RequestContext;并且不需要自己添加用户或 csrf 值,因为只要您使用 RequestContext,它们就会由上下文处理器添加。
我正在使用 django 的 UserCreationForm 注册用户。除了错误外,它工作得很好。我无法让他们渲染。我认为模板没有任何问题,因为我已经使用最基本的模板并使用 form.as_p 和 form.as_table 进行了尝试,注册仍然有效,但如果您输入 2 个不同的密码它只是用一个空的表单刷新屏幕并且没有错误。我还尝试通过 django 消息发送 form.errors,当出现错误时它会传递正确的错误,但此解决方案对我来说不实用。
它不会让我 post 因为缩进模板。我在用 {{form.non_field_errors}} 在表格顶部,然后是 {{ form.email.error }} 等
如果可以请帮忙:)
表格class..
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})
注意其他变化:总是 在成功后重定向 post; render
而不是 render_to_response,因为它为您创建了一个 RequestContext;并且不需要自己添加用户或 csrf 值,因为只要您使用 RequestContext,它们就会由上下文处理器添加。