Django reset_password_confirm TemplateSyntaxError проблема

17

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

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

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

7 ответов

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 - это мой пользовательский шаблон

выход из системы - это мое настраиваемое действие выхода из системы

    
ответ дан 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: url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', auth_views.password_reset_confirm

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

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

    
ответ дан 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
0

Просто добавьте эту строку в свой urls.py:

url('^', include('django.contrib.auth.urls')),

Это включает рабочий процесс django reset_password.

Затем переопределите свой login.html, чтобы включить строку: <div class="password-reset-link"> href="{{ password_reset_url }}">{% trans 'Forgotten your password or username?' %}</a></div>

Теперь вы должны иметь возможность использовать встроенный Django PasswordResetView, включенный в Django, до тех пор, пока настроены ваши настройки электронной почты.

    
ответ дан jason571873742123 15.11.2018 в 01:22