2012-06-11 41 views
0

我有一个注册页面具有低于下面的代码:的Django - 表单验证未示出

在视图

def register_step2(request, value): 
context={"type": value} 
if request.method == 'POST': 
    form = RegisterForm(request.POST) 
    if form.is_valid(): 
     nric = form.cleaned_data['nric'] 
     name = form.cleaned_data['name'] 
     password = form.cleaned_data['password'] 
     email = form.cleaned_data['email'] 
     phonenumber = form.cleaned_data['phonenumber'] 
     dob = form.cleaned_data['dob'] 
     User.objects.create_user(nric, email, password) 
     return HttpResponseRedirect('/') 
return render_to_response('register.html', context, RequestContext(request)) 

在register.html:

{% extends "base.html" %} 
{% block subheader %} 
{% if type == '0' %} 
Are you.. 
{% endif %} 
{% if type == '1' %} 
Registration - Able Elder 
{% endif %} 
{% if type == '2' %} 
Registration - Public 
{% endif %} 
{% endblock %} 

{% block content %} 
{% if type == '0' %} 
<a href="/register/1">an elderly looking for something to do?</a> 
<a href="/register/2">the public looking for someone to help you?</a> 
{% else %} 
<form action="/register/{{type}}/" method="post">{% csrf_token %} 
<table class="center"> 
{% for field in able_form %} 
<tr> 
    <td> 
     {{ field.label_tag }}: 
    </td> 
    <td> 
    {{ field.errors }} 
    {{ field }} 
    </td> 
</tr> 
{% endfor %} 
<tr> 
<td> 
{{ able_form.non_field_errors }} 
</td> 
</tr> 
<tr> 
<td colspan="2"> 
By clicking on "register" I agree with the terms and conditions. 
</td> 
</tr> 
<tr> 
<td colspan="2"> 
<input type="submit" value="register"> 
</form> 
</td> 
{% endif %} 
{% endblock %} 

在context_processors .py(它在settings.py中正确设置)

from forms import RegisterForm 

def able_form(request): 
    return { 
      'able_form' : RegisterForm()} 

在forms.py

class RegisterForm(forms.Form): 
    nric = forms.CharField(max_length=NAME_MAX) 
    name = forms.CharField(max_length=NAME_MAX) 
    password = forms.CharField(widget=forms.PasswordInput) 
    confirm_password = forms.CharField(widget=forms.PasswordInput) 
    email = forms.EmailField() 
    postal_code = forms.IntegerField() 
    phone_number = forms.IntegerField() 
    date_of_birth = forms.DateField(widget=forms.DateInput) 

这是我的理解,可变区域将显示领域的错误,但是当我点击注册按钮没有显示。我在这里做错了什么?

+0

我没有看到一个窗体被传递到模板上下文..在哪里'able_form'来自? –

+0

表格可以正常显示。我会更新我的问题 – causztic

回答

2

有了您的更新,原因是显而易见的:

你永远只传递一个空白表单模板。

你认为绑定表格与request.POST数据会返回到你的模板?创建RegisterForm(request.POST)的新实例不会奇迹般地更改模板中的表单实例(由上下文处理器返回)。

您的模板只能看到RegisterForm() - 如果要知道表单错误,它必须具有与request.POST数据绑定的表单。

form = RegisterForm(request.POST) 
    if form.is_valid(): 
     .... 
    context['able_form'] = form # you must pass back the bound form if you want to see errors. 
return render_to_response('register.html', context, RequestContext(request)) 

即使是这样,你的背景处理器可以重写此able_form关键 - 我会完全消除背景处理器。

如果你认为这是一个好主意,那么你必须记住在那里或在你的视图中执行你的表单逻辑。

+0

谢谢!修复它。我离开了上下文处理器,它仍然工作得很好。 :)我忘了通过绑定的形式回到上下文.. – causztic

+0

Yuji - thx,对于答案和逻辑 - 我有同样的问题,但现在明白了为什么。 –