2016-03-02 2 views
2

Я разрабатываю приложение Django, и у меня возникли проблемы с настройкой пароля сброса. Я получаю следующее сообщение об ошибке:django password reset NoReverseMatch error

Reverse for 'password_reset_confirm' with arguments '()' and keyword arguments '{u'uidb64': 'MQ', u'token': u'49v-cabad3fe98f5d9f64377'}' not found. 0 pattern(s) tried:

Это приходит в мой файл password_reset_email.html, который:

Someone asked for password reset for email {{ email }}. Follow the link below: 
{{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %} 

У меня есть следующие в urls.py

(r'^registration/password_reset_confirm', 'django.contrib.auth.views.password_reset_confirm', 
    {'template_name' : 'coursework/password_reset_confirm.html', 
    'set_password_form' : SetPasswordForm, 
    'post_reset_redirect' : 'coursework.views.list_comments'}), 
(r'^registration/password_reset_done', 'django.contrib.auth.views.password_reset_done', 
    {'template_name' : 'coursework/index.html'}), 
(r'^registration/password_reset', 'django.contrib.auth.views.password_reset', 
    {'password_reset_form' : PasswordResetForm, 
    'template_name' : 'coursework/reset_password.html', 
    'email_template_name' : 'coursework/password_reset_email.html', 
    'subject_template_name' :'coursework/password_reset_subject.txt', 
    'post_reset_redirect' : 'coursework.views.list_comments'}), 

Ясно Я делаю что-то глупое, но я не могу это решить.

СТЕК TRACE ДОБАВЛЕНО

Environment: 


Request Method: POST 
Request URL: http://localhost:23080/registration/password_reset 

Django Version: 1.9 
Python Version: 2.7.11 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'coursework') 
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', 
'django.middleware.security.SecurityMiddleware') 



Traceback: 

File "C:\FCA\lib\django\core\handlers\base.py" in get_response 
    134.     resolver_match = resolver.resolve(request.path_info) 

File "C:\FCA\lib\django\core\urlresolvers.py" in resolve 
    374.    for pattern in self.url_patterns: 

File "C:\FCA\lib\django\utils\functional.py" in __get__ 
    33.   res = instance.__dict__[self.name] = self.func(instance) 

File "C:\FCA\lib\django\core\urlresolvers.py" in url_patterns 
    417.   patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 

File "C:\FCA\lib\django\utils\functional.py" in __get__ 
    33.   res = instance.__dict__[self.name] = self.func(instance) 

File "C:\FCA\lib\django\core\urlresolvers.py" in urlconf_module 
    410.    return import_module(self.urlconf_name) 

File "C:\Python27\lib\importlib\__init__.py" in import_module 
    37.  __import__(name) 

Exception Type: SyntaxError at /registration/password_reset 
Exception Value: invalid syntax (urls.py, line 24) 
+0

Ваш 'password_reset_confirm' зрения не принимает никаких аргументов ключевых слов. Вы должны закодировать некоторых в регулярном выражении url, например: 'r '^ registration/password_reset_confirm/(? P \ w +)/(? P \ w +)'' – schwobaseggl

ответ

2

Ваш шаблон не принимает uidb64 и token аргументы. Измените его на:

(r'^registration/password_reset_confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 'django.contrib.auth.views.password_reset_confirm', 
{'template_name' : 'coursework/password_reset_confirm.html', 
    'set_password_form' : SetPasswordForm, 
    'post_reset_redirect' : 'coursework.views.list_comments'}, 
name='password_reset_confirm'), 
+0

Я только что пробовал это, но я продолжаю получать то же самое ошибка. Я думаю, вы заметили что-то, что я бы получил следующей ошибкой. – HenryM

+0

@HenryM Я также признал, что вам также не хватает аргумента 'name ='. См. Мой обновленный ответ. – Selcuk

+0

, который дает мне неверную синтаксическую ошибку для строки name = 'password_reset_confirm' – HenryM

5

Я отправляю этот ответ, возможно, помогая другим с той же проблемой. Я получал ту же ошибку и сделал все предлагаемые решения в Интернете, не повезло!

в конце, благодаря этой помощи link, это сработало!

решение: добавить url(r'^', include('django.contrib.auth.urls')), к mainProject>urls.py

+0

Этот URL должен быть добавлен к BOTTOM вашего urls.py, если вы используете пользовательские шаблоны или пользовательскую аутентификацию. Но это должно быть ПЕРЕД адресом URL, который вводит PasswordResetConfirmView. К сожалению, это заставляет нас использовать базовый шаблон django для фактического действия ввода новых паролей. – Jaberwocky