There is not your problem, but maybe will be in future. The best way to
clean fields that depend of other fields is override the clean method of
form.

https://docs.djangoproject.com/en/1.7/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

On Thu, Jan 8, 2015 at 9:28 AM, 赵飞 <[email protected]> wrote:

> That's it!  Thanks very very much, you help me a lot!
>
> 2015-01-08 19:10 GMT+08:00 James Schneider <[email protected]>:
>
>> Oh, you are passing a URL to render() instead of a template name. Try
>> something like this:
>>
>> return render(request, 'signup.html', {'form': signup_form})
>>
>> Sorry, didn't catch that the first time.
>>
>> -James
>>
>>
>> On Thu, Jan 8, 2015 at 1:34 AM, 赵飞 <[email protected]> wrote:
>>
>>> I want to make a signup page, when user click signup, it will check if
>>> the two password are the same, when not, give a error message after
>>> "confirm password".
>>>
>>> But when I call "return render(request, reverse("accounts:signup"),
>>> {'form': signup_form}) " in my views.py, it shows me an error, the
>>> traceback is:
>>>
>>>  Environment:
>>>
>>>     Request Method: POST
>>>    Request URL: http://127.0.0.1:8000/accounts/signup_post/
>>>
>>>    Django Version: 1.7
>>>    Python Version: 2.7.5
>>>    Installed Applications:
>>>    ('django.contrib.admin',
>>>     'django.contrib.auth',
>>>     'django.contrib.contenttypes',
>>>     'django.contrib.sessions',
>>>     'django.contrib.messages',
>>>     'django.contrib.staticfiles',
>>>     'accounts')
>>>    Installed Middleware:
>>>    ('django.contrib.sessions.middleware.SessionMiddleware',
>>>     'django.middleware.common.CommonMiddleware',
>>>     'django.middleware.csrf.CsrfViewMiddleware',
>>>     'django.contrib.auth.middleware.AuthenticationMiddleware',
>>>     'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
>>>     'django.contrib.messages.middleware.MessageMiddleware',
>>>     'django.middleware.clickjacking.XFrameOptionsMiddleware')
>>>
>>>    Template Loader Error:
>>>    Django tried loading these templates, in this order:
>>>    Using loader django.template.loaders.filesystem.Loader:
>>>    Using loader django.template.loaders.app_directories.Loader:
>>>
>>>    Traceback:
>>>    File
>>> "/Users/feizhao/.virtualenvs/nahan/lib/python2.7/site-packages/django/core/handlers/base.py"
>>> in get_response
>>>      111.                     response = wrapped_callback(request,
>>> *callback_args, **callback_kwargs)
>>>    File "/Users/feizhao/dropbox/nahan/accounts/views.py" in signup_post
>>>      64.     return render(request, reverse("accounts:signup"), {'form':
>>> signup_form})
>>>    File
>>> "/Users/feizhao/.virtualenvs/nahan/lib/python2.7/site-packages/django/shortcuts.py"
>>> in render
>>>      48.     return HttpResponse(loader.render_to_string(*args,
>>> **kwargs),
>>>    File
>>> "/Users/feizhao/.virtualenvs/nahan/lib/python2.7/site-packages/django/template/loader.py"
>>> in render_to_string
>>>      170.         t = get_template(template_name, dirs)
>>>    File
>>> "/Users/feizhao/.virtualenvs/nahan/lib/python2.7/site-packages/django/template/loader.py"
>>> in get_template
>>>      144.     template, origin = find_template(template_name, dirs)
>>>    File
>>> "/Users/feizhao/.virtualenvs/nahan/lib/python2.7/site-packages/django/template/loader.py"
>>> in find_template
>>>      136.     raise TemplateDoesNotExist(name)
>>>
>>>    Exception Type: TemplateDoesNotExist at /accounts/signup_post/
>>>    Exception Value: /accounts/signup/
>>>
>>> my account app looks like:
>>>
>>>    $ tree -L 3 accounts
>>>    accounts
>>>    ├── __init__.py
>>>    ├── admin.py
>>>    ├── forms.py
>>>    ├── locale
>>>    │   └── zh_CN
>>>    ├── migrations
>>>    │   ├── 0001_initial.py
>>>    │   ├── __init__.py
>>>    ├── models.py
>>>    ├── static
>>>    │   └── accounts
>>>    │       └── login.css
>>>    ├── templates
>>>    │   └── accounts
>>>    │       ├── base.html
>>>    │       ├── login.html
>>>    │       └── signup.html
>>>    ├── tests.py
>>>    ├── urls.py
>>>    ├── views.py
>>>
>>>  urls.py:
>>>
>>>     urlpatterns = patterns(
>>>        '',
>>>        url(r'^accounts/', include('accounts.urls', namespace="accounts"
>>> )),
>>>        url(r'^admin/', include(admin.site.urls)),
>>>    )
>>>
>>> accounts/urls.py:
>>>
>>>     urlpatterns = patterns(
>>>        '',
>>>        url(r'^login/$', views.login, name='login'),
>>>        url(r'^signup/$', views.signup, name='signup'),
>>>        url(r'^login_post/$', views.login_post, name='login_post'),
>>>        url(r'^signup_post/$', views.signup_post, name='signup_post'),
>>>    )
>>>
>>> signup_post function in views.py:
>>>
>>>     def signup_post(request):
>>>        if request.method == 'POST':
>>>            signup_form = forms.SignupForm(request.POST)
>>>
>>>            if signup_form.is_valid():
>>>                signup_info = signup_form.cleaned_data
>>>                username = signup_info['username']
>>>                email = signup_info['email']
>>>                password = signup_info['password_1']
>>>                user = User.objects.create_user(
>>>                    username=username,
>>>                    email=email,
>>>                    password=password)
>>>                user.save()
>>>
>>>        else:
>>>            signup_form = forms.SignupForm()
>>>
>>>        return render(request, reverse("accounts:signup"), {'form':
>>> signup_form})
>>>
>>> I have read [Django TemplateDoesNotExist][1] and other similar
>>> questions, but no help!
>>>
>>>   [1]:
>>> https://stackoverflow.com/questions/4765003/django-templatedoesnotexist
>>>
>>> 在 2015年1月7日星期三UTC+8下午10时03分09秒,赵飞写道:
>>>
>>>> I want to make a signup page just like:
>>>>
>>>>
>>>> <https://lh5.googleusercontent.com/-BYeglZkQ0cM/VK06PkzpdPI/AAAAAAAAAN0/l5xB5VdkbJk/s1600/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%2B2015-01-07%2B%E4%B8%8B%E5%8D%889.52.08.png>
>>>> When user click signup, I want to check the if the two password are the
>>>> same, when not, give a error message after "confirm password".  Here is my
>>>> code:
>>>>
>>>> *forms.py*
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> *class SignupForm(forms.Form):    username = forms.CahrField(
>>>> label=_("username"),        max_length=30,    )    email =
>>>> forms.EmailField(label=_('email'),)    password_1 = forms.CharField(
>>>> label=_("password"),        widget=forms.PasswordInput,    )    password_2
>>>> = forms.CharField(        label=_("password_confirmed"),
>>>> widget=forms.PasswordInput,    )    def clean_password_2(self):
>>>> password_1 = self.cleaned_data.get("password_1")        password_2 =
>>>> self.cleaned_data.get("password_2")        if password_1 and password_2 and
>>>> password_1 != password_2:            raise
>>>> forms.ValidationError(_('password confirm failed'))        return
>>>> password_2 signup.html*
>>>>
>>>> <form method="post" action="{% url 'accounts:signup_post' %}">
>>>>     {% csrf_token %}
>>>>     <table>
>>>>     {% for field in form %}
>>>>         <tr>
>>>>             <td>{{ field.label_tag }}</td>
>>>>             <td>{{ field }}</td>
>>>>             <td>{{ field.errors }}</td>
>>>>         </tr>
>>>>     {% endfor %}
>>>>     </table>
>>>>
>>>>     <input type='submit' id="submit" value={% trans "signup" %}>
>>>>     <a href="{% url 'accounts:login' %}">{% trans "Already have
>>>> accounts?" %}</a>
>>>> </form>
>>>>
>>>>
>>>>
>>>> *views.py*
>>>>
>>>> def signup_post(request):
>>>>     if request.method == 'POST':
>>>>         signup_form = forms.SignupForm(request.POST)
>>>>
>>>>         if signup_form.is_valid():
>>>>             signup_info = signup_form.cleaned_data
>>>>             username = signup_info['username']
>>>>             email = signup_info['email']
>>>>             password = signup_info['password_1']
>>>>             user = User.objects.create_user(
>>>>                 username=username,
>>>>                 email=email,
>>>>                 password=password)
>>>>             user.save()
>>>>             # redirect to main page(not written so far)
>>>>         else:
>>>>             # I guess something wrong here, but no idea how to fix it.
>>>>             return redirect(reverse("accounts:signup"))
>>>>
>>>>     else:
>>>>         signup_form = forms.SignupForm()
>>>>
>>>>     return render(reverse("accounts:signup"), {'form': signup_form})
>>>>
>>>> Can anyone help me out?
>>>> *Thanks!*
>>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/django-users.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/django-users/d62f49e5-993d-492b-9b7b-1e3cb329e63d%40googlegroups.com
>>> <https://groups.google.com/d/msgid/django-users/d62f49e5-993d-492b-9b7b-1e3cb329e63d%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "Django users" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/django-users/ZIsrf9vEXyg/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/django-users.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/django-users/CA%2Be%2BciVLaCjYiYFkbLHZuzf2tjU69i%3Dgt1f9TMMShspNyUqNZA%40mail.gmail.com
>> <https://groups.google.com/d/msgid/django-users/CA%2Be%2BciVLaCjYiYFkbLHZuzf2tjU69i%3Dgt1f9TMMShspNyUqNZA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
>
>
>
> 祝自由,开心!
> ----------------------------------------------------------------
> 中山大学
> 信息科学与技术学院
> 信息安全专业
> 赵飞
> ----------------------------------------------------------------
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAOV3_ptnXzKCFmomS0DJjnJrsCB%2BbdOFa%2Bk45K6yaT7TPMBA_g%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CAOV3_ptnXzKCFmomS0DJjnJrsCB%2BbdOFa%2Bk45K6yaT7TPMBA_g%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAGjPPH%3DKX9TUnLtfWTxngoGXC1WNu9RqDGEX5xFa-83kUSAZFg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to