【问题标题】:Error:Reverse for 'password_reset_confirm' not found. 'password_reset_confirm' is not a valid view function or pattern name错误:未找到“password_reset_confirm”的反向。 'password_reset_confirm' 不是有效的视图函数或模式名称
【发布时间】:2020-06-07 16:20:35
【问题描述】:

我遇到了密码重置问题。如果我删除命名空间 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',所以视图应该是crm:password_reset_confirm
  • @WillemVanOnsem 对不起,我是 django 的新手,所以你的意思是在 as_view() 中传递 crm:password_reset_confirm
  • 你能显示完整的回溯吗?你从哪里得到错误?
  • 内部服务器错误:/reset_password/ Traceback(最近一次调用最后一次):引发 NoReverseMatch(msg) django.urls.exceptions.NoReverseMatch:找不到“password_reset_confirm”的反向。 'password_reset_confirm' 不是有效的视图函数或模式名称。
  • 当我输入电子邮件地址并提交时,我收到此错误

标签: python django django-authentication


【解决方案1】:

由于你指定了app_name = 'crm',这意味着视图的名称应该以<i>app_name</i>:开头,所以这里以crm:password_reset_confirm为例。

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

from django.urls import reverse_lazy
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(success_url=reverse_lazy('crm:password_reset_done')),
        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(success_url=reverse_lazy('crm:password_reset_complete')),
        name='password_reset_confirm'
    ),
    path(
        'reset_password_complete/',
        auth_views.PasswordResetCompleteView.as_view(),
        name='password_reset_complete'
    )
]

【讨论】:

    【解决方案2】:

    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'
    ),
    # ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-30
      • 2019-04-04
      • 2019-03-17
      • 2020-01-02
      • 2018-11-19
      • 2019-04-06
      • 2019-08-13
      • 2019-11-04
      相关资源
      最近更新 更多