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

