Error:Reverse for 'password_reset_confirm' not found. 'password_reset_confirm' is not a valid view function or pattern name

Error:Reverse for 'password_reset_confirm' not found. 'password_reset_confirm' is not a valid view function or pattern name

我在重置密码时遇到问题。如果我删除命名空间 app_name = 'crm' ,它会完美运行。但是当我包含 app_name = 'crm' 我得到错误,

错误:未找到 'password_reset_confirm' 的反向。 'password_reset_confirm' 不是有效的视图函数或模式名称。

但我希望它在不删除命名空间的情况下工作。

我的urls.py

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

app_name = 'crm'
urlpatterns = [
    path('', views.home, name='dashboard'),
    path('login/', views.loginPage, name='login'),
    path('register/', views.registerPage, name='register'),
    path('logout/', views.logoutUser, name='logout'),
    path('reset_password/', auth_views.PasswordResetView.as_view(),
         name="reset_password"),
    path('reset_password_sent/', auth_views.PasswordResetDoneView.as_view(),
         name="password_reset_done"),
    path('reset/<uidb64>/<token>/',
         auth_views.PasswordResetConfirmView.as_view(), name="password_reset_confirm"),
    path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(),
         name="password_reset_complete"),
]

由于您指定了 app_name = 'crm',这意味着视图的名称应该以 <i>app_name</i>:, 例如这里 crm:password_reset_confirm.

url 写在视图中,但我们可以覆盖这些,例如:

from django.urls import <b>reverse_lazy</b>
from django.urls import path
from . import views
from django.contrib.auth import views as auth_views

app_name = 'crm'

urlpatterns = [
    path('', views.home, name='dashboard'),
    path('login/', views.loginPage, name='login'),
    path('register/', views.registerPage, name='register'),
    path('logout/', views.logoutUser, name='logout'),
    path(
        'reset_password/',
        auth_views.PasswordResetView.as_view(<b>success_url=reverse_lazy('crm:password_reset_done')</b>),
        name='reset_password'
    ),
    path(
        'reset_password_sent/',
        auth_views.PasswordResetDoneView.as_view(),
        name='password_reset_done'
    ),
    path(
        'reset/<uidb64>/<token>/',
        auth_views.PasswordResetConfirmView.as_view(<b>success_url=reverse_lazy('crm:password_reset_complete')</b>),
        name='password_reset_confirm'
    ),
    path(
        'reset_password_complete/',
        auth_views.PasswordResetCompleteView.as_view(),
        name='password_reset_complete'
    )
]

Django 3.2.5 和 Python 3.8.10 - 同样的错误

在我的例子中,我必须为 PasswordResetView 定义一个 email_template_name,然后重新创建该电子邮件模板。

# ...
path(
    'reset_password/',
    auth_views.PasswordResetView.as_view(
        success_url=reverse_lazy('crm:password_reset_done'),
        email_template_name='my_email.html'
    ),
    name='reset_password'
),
# ...