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