2013-08-19 26 views
0

我有一個註冊表單。當我嘗試註冊時,它確實如此,一切都很好,就在那裏,它現在會在模板中顯示任何表單驗證錯誤,而且應該是。模板現在顯示Django中的任何錯誤

forms.py:

from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.models import User 
from django import forms 
import re 
from django.core.exceptions import ObjectDoesNotExist 



class UserCreationForm(UserCreationForm): 
    class Meta: 
     model = User 
     fields = ('first_name', 'last_name', 'username',) 

    username = forms.EmailField(label='Email', max_length=250) 

    def save(self, commit=True): 
     user = super(UserCreationForm, self).save(commit=False) 
     user.email = user.username 
     user.save() 
     return user 

    def clean_password2(self): 
     if 'password1' in self.cleaned_data: 
      password1 = self.cleaned_data['password1'] 
      password2 = self.cleaned_data['password2'] 
      if password1 == password2: 
       return password2 
     raise forms.ValidationError('Password do not match.') 

    def clean_username(self): 
     username = self.cleaned_data['username'] 
     if not re.search(r'^\w[\w.]*@[\w.]+$', username): 
      raise forms.ValidationError('Please enter a valid email address.') 
     try: 
      User.objects.get(username=username) 
     except ObjectDoesNotExist: 
      return username 
     raise forms.ValidationError('Email address is already taken.') 

views.py:

def register_user(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register_success') 
     else: 
      print form.is_valid() 
      print form.errors 
    args = {} 
    args.update(csrf(request)) 

    args['form'] = UserCreationForm() 
    print args 
    return render_to_response('register.html', args) 

register.html:

{% extends "base.html" %} 

{% block content %} 

<h1>Registration:</h1> 
<form method="post" action="."> 
{% csrf_token %} 
    {{form.as_p}} 
    <input type="submit" value="Register" /> 
</form> 

{% endblock %} 

我甚至嘗試{% if form.errors %}

{% extends "base.html" %} 

{% block content %} 

{% if form.errors %} 
    <p>{{form.errors }}</p> 
{% endif %} 

<h1>Registration:</h1> 
<form method="post" action="."> 
{% csrf_token %} 
    {{form.as_p}} 
    <input type="submit" value="Register" /> 
</form> 

{% endblock %} 

但沒有運氣。我想我錯過了一些東西。

回答

3

原因是,如果有錯誤,您正在使用form=UserCreationForm()

基本上覆蓋它,如果if form.is_valid()False,你需要發送的形式不變。通過調用form=UserCreationFormform.is_valid()要覆蓋錯誤

試試這個:

def register_user(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register_success') 
     else: 
      print form.is_valid() 
      print form.errors 
    else: 
     form = UserCreationForm() 

    return render_to_response('register.html', {'form': form}, context_instance=RequestContext(request)) 
+0

它仍然沒有工作.... – Robin

+0

嘗試編輯。 。 – karthikr

+0

現在我按下注冊後,它只顯示註冊按鈕。 – Robin