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.

