Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

{% load url from future %}

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

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

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

Ответ 3

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

и reset в шаблоне:

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

Ответ 4

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

Ответ 5

Попробуйте добавить следующее к 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'),

Ответ 6

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