I have a registration page with the following code below:
in the views:
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))
in the 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 %}
in context_processors.py (it is setup properly in settings.py )
from forms import RegisterForm
def able_form(request):
return {
'able_form' : RegisterForm()}
in the 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)
It is to my understanding that the variable fields will display the field errors, but none is shown when I click on the register button. What am I doing wrong here?
With your update, the reason is obvious:
You are only ever passing a blank form to your template.
Where do you assume that the bound form with
request.POSTdata gets returned to your template? Creating a new instance ofRegisterForm(request.POST)does not magically change the form instance in your template (returned by the context processor).Your template only ever sees
RegisterForm()— if it is to know of a form error, it must have the form that was bound with the request.POST data.Even then, your context processor may override this
able_formkey – I’d remove the context processor altogether.If you think it’s a great idea to have it, then you have to remember to do your form logic there or in your view.