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

Django4.0密码重置报password_reset_confirm反向解析未找到错误

报错原因
  • 你给Core应用配置了app_name='Core'路由命名空间,该应用下所有路由必须带Core:前缀才能被反向解析,但Django 4.x内置PasswordResetView默认反向解析不带命名空间的password_reset_confirm路由名来生成重置邮件的验证链接,匹配不到现有路由就抛出该错误。
  • 现有密码重置路由配置不全,且PasswordResetConfirmView跳转逻辑错误:这个视图是用户输入新密码的页面,提交成功后应该跳转到重置完成提示页,当前配置把success_url指向视图自身,逻辑不通;同时缺少「重置邮件发送成功提示页」「密码重置完成提示页」两个必要路由,就算解决反向解析问题,后续流程也会报错。
  • 贴出的代码本身存在语法问题:多行导入视图类时没有用括号包裹,urlpatterns列表未闭合,运行时会直接触发语法错误。
修复方法
  1. 修正基础语法问题,补全缺失的视图导入,调整所有密码重置相关路由的配置,给每个内置视图显式指定带命名空间的跳转地址:
from django.urls import path, reverse_lazy
from Core import views 
from django.contrib.auth.views import (
    PasswordChangeView,
    PasswordResetView,
    PasswordChangeDoneView, 
    PasswordResetConfirmView,
    PasswordResetDoneView,
    PasswordResetCompleteView
)
from .forms import MyChangePasswordForm, MyPasswordResetForm


app_name ='Core'

urlpatterns = [
    path('',views.home, name='home'),
    path('signup/',views.SignupView.as_view(),name='signup'),
    path('login/',views.LoginView.as_view(),name='login'),
    path('logout/', views.LogoutView.as_view(), name='logout'),
    path('change-password/', PasswordChangeView.as_view(
        template_name='Core/change-password.html',
        form_class=MyChangePasswordForm, 
        success_url=reverse_lazy('Core:password_change_done')
    ), name='change-password'),
    path('password-change-done/', PasswordChangeDoneView.as_view(
        template_name='Core/password_change_done.html'
    ), name='password_change_done'),

    path('reset-password/', PasswordResetView.as_view(
        template_name='Core/password-reset.html',
        form_class=MyPasswordResetForm,
        success_url=reverse_lazy('Core:password_reset_done'),
        email_template_name='Core/password_reset_email.html'
    ), name='reset-password'),
    path('reset-password/done/', PasswordResetDoneView.as_view(
        template_name='Core/password_reset_done.html'
    ), name='password_reset_done'),
    path('password-reset-confirm/<uidb64>/<token>/', PasswordResetConfirmView.as_view(
        template_name='Core/password_reset_confirm.html',
        success_url=reverse_lazy('Core:password_reset_complete')
    ), name='password_reset_confirm'),
    path('reset-password/complete/', PasswordResetCompleteView.as_view(
        template_name='Core/password_reset_complete.html'
    ), name='password_reset_complete'),
]
  1. 新建自定义密码重置邮件模板Core/password_reset_email.html,手动指定带命名空间的路由生成重置链接,替换默认模板不带命名空间的解析逻辑,模板参考内容:
你收到这封邮件是因为有人请求重置绑定账号{{ email }}的密码,点击下方链接完成重置:
{{ protocol }}://{{ domain }}{% url 'Core:password_reset_confirm' uidb64=uid token=token %}

如果不是你本人发起的重置请求,直接忽略这封邮件即可,你的密码不会发生变更。
  1. 补全剩余三个模板文件即可正常使用功能:
    • Core/password_reset_done.html:提示用户重置邮件已发送,引导用户查收邮箱
    • Core/password_reset_confirm.html:渲染新密码输入表单
    • Core/password_reset_complete.html:提示密码重置成功,可添加跳转登录页的入口

如果不想自定义邮件模板,也可以把4个密码重置相关路由移到项目根urls.py中(不放在带app_name的子应用路由下),路由名不使用命名空间,即可直接复用Django默认的邮件模板,但自定义模板的方式更符合路由隔离的开发规范,灵活度更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:33:06