You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django密码修改功能异常:出现NoReverseMatch错误

解决Django auth_views密码修改后NoReverseMatch错误

问题根源

Django自带的PasswordChangeView在密码修改成功后,默认会尝试反向解析名为password_change_done的URL,但你配置的成功页面路由name是change_psw_done,名称不匹配导致反向解析失败,抛出了找不到视图的错误。

两种解决方法

方法一:修改路由name为默认值

直接把成功页面的路由name改成password_change_done,和视图默认期望的名称保持一致:

urlpatterns = [
    path('settings/change_password',
         auth_views.PasswordChangeView.as_view(template_name="accounts/change_psw-dj.html"),
         name="change_psw"), 
    path('settings/change_password_done',
         auth_views.PasswordChangeDoneView.as_view(template_name="accounts/change_psw_done-dj.html"),
         name="password_change_done"),  # 修改为默认名称
]

方法二:给PasswordChangeView指定自定义success_url

如果不想修改路由name,可以在PasswordChangeView里通过success_url参数指定你自定义的路由name:

from django.urls import reverse_lazy

urlpatterns = [
    path('settings/change_password',
         auth_views.PasswordChangeView.as_view(
             template_name="accounts/change_psw-dj.html",
             success_url=reverse_lazy("change_psw_done")  # 指定自定义路由名称
         ),
         name="change_psw"), 
    path('settings/change_password_done',
         auth_views.PasswordChangeDoneView.as_view(template_name="accounts/change_psw_done-dj.html"),
         name="change_psw_done"),
]

这里用reverse_lazy是因为URL配置加载时,反向解析的路由可能还未初始化完成,延迟加载可以避免报错。

内容的提问来源于stack exchange,提问作者Starlight Luci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:39:25