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 найдено.
Ответы
Ответ 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'),