Django 2.1.2 密码重置 auth 视图:找不到 'password_reset_confirm' 的反向

Django 2.1.2 Password reset auth view: Reverse for 'password_reset_confirm' not found

我的密码重置系统有问题。 代码如下。当我直接在浏览器地址中输入相应的 URL 时,它会显示预期的 Django forms/pages。 但是,如果我填写电子邮件地址并点击 enter/click 和 link,我会在 password_reset_email.html 的第 6 行收到 "Reverse for 'password_reset_confirm' not found. 'password_reset_confirm' is not a valid view function or pattern name." 错误。 但是我已经包括了uid64!和令牌! 此外,当我故意使用不正确的电子邮件地址时,我会收到 "Reverse for 'password_reset_done' not found. 'password_reset_done' is not a valid view function or pattern name." 错误。

我无法从 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'),
    ]

当您定义 app_name 时,您也应该为反向指定它。 使用 users:password_reset_done 而不是 password_reset_done

查看 reversing-namespaced-urls 了解更多详情。

问题是 Django 在反转密码重置时不使用命名空间 urls.py。您可以通过从 urls.py.

中删除 app_name='users' 来停止错误

或者,您可以将密码重置视图配置为使用命名空间:"

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

这将修复即时错误,但您会发现您需要进行其他几项更改才能修复类似错误。删除 app_name='users' 更直接。