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

Django 2.0报错:找不到'password_change_done'反向解析,无法渲染成功模板

解决Django 2.0中password_change_done反向解析失败的问题

这个问题我之前也碰到过,核心原因是Django自带的密码修改视图默认找的是全局命名空间下的password_change_done,但你的URL都放在account这个命名空间里了,所以反向解析就找不到啦。不过别担心,密码已经改成功了,只是跳转的视图没配置对,咱们一步步来解决:

1. 补全password_change_done的URL配置

首先你需要在account/urls.py里添加对应的成功页路由,让Django能找到这个视图:

from django.contrib.auth import views as auth_views
from django.urls import path
from django.urls import reverse_lazy  # 记得导入这个
from . import views

app_name = 'account'

urlpatterns = [
    path('', views.dashboard, name='dashboard'),
    # 新增密码修改成功页的路由
    path('password-change/done/', 
         auth_views.PasswordChangeDoneView.as_view(template_name='account/password_change_done.html'), 
         name='password_change_done'),
    # 其他路由...
]

这里显式指定了template_name,确保Django能定位到你自定义的password_change_done.html模板。

2. 修改密码修改视图的成功跳转地址

接下来要调整password_change的路由配置,显式指定带命名空间的成功跳转URL——因为Django默认的PasswordChangeView会去找无命名空间的password_change_done,咱们得告诉它要找account命名空间下的:

# 把这段加到urlpatterns里(如果还没配置的话)
path('password-change/', 
     auth_views.PasswordChangeView.as_view(
         template_name='account/password_change.html',
         success_url=reverse_lazy('account:password_change_done')
     ), 
     name='password_change'),

用reverse_lazy而不是reverse的原因是:URL配置加载时,password_change_done的路由可能还没被解析完成,懒加载能避免这个时序问题。

3. 检查模板中的URL调用(如果有)

如果你在模板里用了URL标签跳转到密码修改页面,记得也要加上命名空间前缀:

<a href="{% url 'account:password_change' %}">修改密码</a>

这样修改后,密码修改成功后就能正确渲染你的password_change_done.html模板啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:13:46