繁体   English   中英

Django UserCreationForm未在模板中呈现错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM