2015-04-12 66 views
0

我正在使用django的UserCreationForm來註冊用戶。除了錯誤之外,它完美地工作。我無法讓他們呈現。我不認爲模板有什麼問題,因爲我已經使用最基本的模板嘗試了這一點,並使用form.as_p和form.as_table,並且仍然是相同的註冊工作,但是如果您將2個不同的密碼放入其中,只需刷新屏幕空白,沒有錯誤。此外,我已經嘗試通過django消息發送form.errors,並且在有一個錯誤時傳遞正確的錯誤,但這種解決方案對我來說不實用。Django UserCreationForm不在模板中呈現錯誤

它不會讓我張貼模板,因爲縮進。我使用 {{form.non_field_errors}}在表單的頂部,然後{{form.email.error}}等

請幫助,如果你能:)

Form類..

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) 
+0

signup.html中的內容是什麼? – MaxQ

回答

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,它們就會被上下文處理器添加。

+0

非常感謝。對此,我真的非常感激:) – user3250052