Django reset_password_confirm TemplateSyntaxError проблема - PullRequest
17 голосов
/ 25 января 2011

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

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

Ответы [ 7 ]

24 голосов
/ 26 января 2011

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

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

6 голосов
/ 12 февраля 2014

Если вы используете 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 %}

6 голосов
/ 22 мая 2012

У меня была эта проблема в 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.

2 голосов
/ 30 декабря 2014

Для пользователей 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 %}

1 голос
/ 04 июня 2012

Попробуйте добавить следующее в свой 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'),
0 голосов
/ 15 ноября 2018

Просто добавьте эту строку в ваш 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, до тех пор, пока настроены ваши настройки электронной почты.

0 голосов
/ 19 декабря 2014

Я нашел, что это работает, скопировано с 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'),

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...