Django reset_password_confirm Проблема шаблонаSyntaxError

17

, когда я использую django.contrib.auth.views.password_reset_confirm без аргументов вообще, он работает, и я могу отображать шаблон без каких-либо проблем при добавлении аргументов uidb36 и токена.

Caught NoReverseMatch при рендеринге: Обратный для 'django.contrib.auth.views.password_reset_confirm' с аргументами '()' и ключевыми аргументами '{' uidb36 ':' 111 ',' token ':' 1111111111111 '}' not найдено.

    
задан Afiku 25.01.2011 в 08:06
источник
  • Пожалуйста, покажите свой urls.py. –  Daniel Roseman 25.01.2011 в 10:09

6 ответов

24

Скорее всего, это проблема с вашим urls.py. Вам нужно настроить правильный шаблон, чтобы захватить значения uidb36 и токена, переданные в качестве параметров URL. Если нет, это приведет к аналогичной ошибке к тому, что вы видите выше.

Что-то вроде:

(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', {'template_name' : 'registration/password_reset.html',  'post_reset_redirect': '/logout/' })

registration / password_reset.html - это мой пользовательский шаблон

logout - это мое пользовательское действие выхода из системы

    
ответ дан Chris Wherry 26.01.2011 в 06:43
источник
  • спасибо, что вы были прав =) –  Afiku 26.01.2011 в 09:13
  • Кажется абсурдным для чего-то встроенного в Django, чтобы не иметь такую ​​информацию на своем официальном сайте документации. В любом случае спасибо за этот ответ! Все еще полезно почти два года спустя –  Dan Passaro 21.01.2013 в 17:54
6

У меня была эта проблема в Django 1.3, и я потратил много времени, потому что ошибка может замаскировать ряд основных проблем.

Мне нужно было добавить это в начало шаблона электронной почты для сброса:

{% load url from future %}

Кроме того, пример в документах Django не соответствовал образцу URL:

{{ protocol}}://{{ domain }}{% url 'auth_password_reset_confirm' uidb36=uid token=token %}

Поэтому мне пришлось изменить auth_password_reset_confirm выше на password_reset_confirm .

    
ответ дан greg 22.05.2012 в 13:30
источник
6

Если вы используете Django 1.6+ и запускаете что-то вроде этого, возможно, вам нужно обновить uidb36 до uidb64 как в вашем шаблоне, так и в ваших URL-адресах.

Пример URL: % Co_de%

и сбросьте ссылку в шаблоне:

url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', auth_views.password_reset_confirm     

ответ дан Lunulata 12.02.2014 в 18:41
источник
  • Спасибо! этот ответ спас меня в ночь поиска! –  Rias 17.06.2015 в 23:18
2

Для пользователей Django 1.8+ просто скопируйте этот URL-адрес в свой основной файл urls.py , чтобы он распознал имя URL-адреса

  url(r'^reset/(?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',
        name='password_reset_confirm'),

И добавьте это в: @Lunulata в файл password_reset_email.html :

{{ protocol}}://{{ domain }}{% url 'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %}

    
ответ дан K2A 30.12.2014 в 14:42
источник
1

Попробуйте добавить следующее к urls.py

(r'^reset/(?P<uidb36>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 'django.contrib.auth.views.password_reset_confirm'),
    
ответ дан Amrut 04.06.2012 в 11:51
источник
0

Я нашел, что это работает, скопировано из URL-адреса по умолчанию

url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', auth_views.password_reset_confirm, name='password_reset_confirm'),     

ответ дан GeekyCoder 19.12.2014 в 10:30
источник