У меня проблема с системой сброса Passord. Код приведен ниже. Когда я ввожу соответствующий URL-адрес в адрес браузера напрямую, он показывает ожидаемые формы / страницы Django. Однако, если я введу адрес электронной почты и нажму Enter / щелкну ссылку, я получаю сообщение «Обратный вариант для 'password_reset_confirm' not found. 'Password_reset_confirm' не является допустимой функцией просмотра или именем шаблона». ошибка в строке 6 файла password_reset_email.html. Но я включил uid64! и жетон! Кроме того, когда я намеренно использую неправильный адрес электронной почты, я получаю сообщение «Обратный вариант для 'password_reset_done' не найден. 'Password_reset_done' не является допустимой функцией просмотра или именем шаблона». ошибка.

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

from django.urls import path
from django.contrib.auth import views as auth_views

from . import views

app_name = 'users'
urlpatterns = [
    path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
    path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('password_reset/confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('password_reset/complete/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
    ]
0
Escatologist 22 Окт 2018 в 17:57

2 ответа

Лучший ответ

Проблема в том, что Django не использует пространство имен при отмене сброса пароля urls.py. Вы можете остановить ошибку, удалив app_name='users' из urls.py.

Кроме того, вы можете настроить представление сброса пароля для использования пространства имен: "

path('password_reset/', auth_views.PasswordResetView.as_view(success_url=reverse_lazy('users:password_reset_done')), name='password_reset'),

Это немедленно исправит ошибку, но вы обнаружите, что вам нужно внести еще несколько изменений, чтобы исправить подобные ошибки. Удалить app_name='users' проще.

1
Alasdair 22 Окт 2018 в 15:07

Когда вы определяете app_name, вы должны указать его также для реверса. Используйте users:password_reset_done вместо password_reset_done

Проверьте reversing-namespaced-urls для подробнее.

0
Mounir 22 Окт 2018 в 15:05
52932303