Django UserCreationForm不会在模板中呈现错误

时间:2015-04-12 14:34:16

标签: python django forms view

我正在使用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)

1 个答案:

答案 0 :(得分:0)

如果表单有错误,则显式重新创建表单,在上下文中将表单替换为未绑定表单,因此没有错误。不要那样做。您的观点应该简单:

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,它们就会由上下文处理器添加。