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
相关产品推荐
相关产品推荐

