2015-01-08 2 views
1

Я хочу сделать страницу регистрации, когда пользователь нажимает кнопку регистрации, он проверяет, совпадают ли оба пароля, а когда нет, выдать сообщение об ошибке после «подтвердить пароль».django TemplateDoesNotExist

Но когда я называю «обратный визуализации (запрос, обратный (» счета: Регистрация «), {„форма“: signup_form})» в моем views.py, он показывает мне ошибку, отслеживающий является:

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/ 

приложение мой счет выглядит следующим образом:

$ 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)), 
) 

счета/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 в 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}) 

Я прочитал Django TemplateDoesNotExist и другие подобные вопросы, но не поможет!

ps: Я спросил another question о регистрации, может быть, полезно.

+0

Как выглядит ваш 'signup'? Какова ваша рендеринг в этой точке зрения? – Evert

+3

'reverse (" accounts: signup ")' возвращает URL-адрес, а не имя шаблона, попробуйте 'return render (request, 'accounts/signup.html', {'form': signup_form})' – abidibo

+0

@abidibo, что правильно , вы должны опубликовать это как ответ. –

ответ

5

Проблема здесь состоит в том, что

reverse("accounts:signup") 

возвращает URL, смотрите здесь (https://docs.djangoproject.com/en/1.7/ref/urlresolvers/#reverse), в то время как вам нужен путь к шаблонам, так что вы должны вернуться:

return render(request, 'accounts/signup.html', {'form': signup_form}) 
+0

Спасибо большое !!! – selfboot

1

Вы должны установить шаблон шаблона dir в файле настроек.py, Пожалуйста, вставьте код ниже в файл settings.py.

import os 

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__)) 

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH,'templates'), 
) 

Как вы должны передать имя шаблона в представлении, когда вы возвращаете ответ.

return render(request, 'accounts/signup.html', {'form': signup_form}) 
+0

«учетные записи» - это установленное приложение, как вы можете видеть из трассировки, а так как «django.template.loaders.app_directories.Loader» включен, нет необходимости (в этом случае) добавлять кортеж TEMPLATE_DIRS в настройки. py – abidibo

+0

TEMPLATE_DIRS предназначен для руководства django для поиска шаблонов в этом конкретном пути, который вы указали в этом кортеже. Rest "accounts/accountup.html" аргумент, который вы передаете в функции "render", зависит от того, как вы храните файлы html в папке «шаблоны». Поэтому в идеале в этом случае ваш html-файл должен находиться в разделе «templates/accounts/signup.html» – Prateek

+0

да, но имея дело с исходным вопросом, из дерева приложений вы можете увидеть, что шаблон 'signup.html' находится внутри папки шаблонов приложения, поэтому он находится в каталоге 'django.template.loaders.app_directories.Loader'. По этой причине в этом случае нет необходимости указывать кортеж TEMPLATE_DIRS. – abidibo

Смежные вопросы