У меня проблема с системой сброса 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'),
]
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'
проще.
Когда вы определяете app_name
, вы должны указать его также для реверса. Используйте users:password_reset_done
вместо password_reset_done
Проверьте reversing-namespaced-urls для подробнее.
Похожие вопросы
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.