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

Django出现NoReverseMatch错误:无法匹配password_reset_done视图

解决Django中password_reset_done反向匹配失败的问题

问题原因

出现django.urls.exceptions.NoReverseMatch: Reverse for 'password_reset_done' not found错误,核心是你给django.contrib.auth.urls添加了namespace='accounts'命名空间,但Django内置的密码重置相关视图、模板在反向解析URL时,没有带上这个命名空间前缀,导致找不到对应路由。另外你的urls.py还有语法错误:导入了welcome_view却用views.welcome_view调用,这会触发views未定义的报错,得先修正。

修复步骤

1. 修正URL配置的语法错误

先把welcome_view的调用改对,同时确保导入include模块:

from django.contrib import admin
from django.urls import path, include
from app1.views import profile, welcome_view

urlpatterns = [
    path('accounts/', include(('django.contrib.auth.urls', 'auth'), namespace='accounts')),
    path('accounts/profile/', profile, name='profile'),
    path('admin/', admin.site.urls),
    path('', welcome_view, name="welcome_view"),  # 移除前面的views.
]

2. 让模板适配命名空间(保留命名空间时用)

如果要保留accounts命名空间,需要修改密码重置相关模板里的URL反向解析:

  • 打开password_reset.html模板,将表单的action改为带命名空间的URL:
    <form action="{% url 'accounts:password_reset' %}" method="post">
    {% csrf_token %}
    <!-- 表单内容 -->
    </form>
    
  • 所有涉及密码重置流程的URL反向都要加上accounts:前缀,比如password_reset_done要写成{% url 'accounts:password_reset_done' %}

3. 可选:移除命名空间(简化方案)

如果不需要命名空间,直接简化URL配置即可,Django默认模板无需修改就能正常工作:

path('accounts/', include('django.contrib.auth.urls')),

此时反向解析直接用{% url 'password_reset_done' %}即可。

验证

修改完成后重启Django服务,测试密码重置流程:点击“忘记密码或用户名”进入password_reset页面,输入邮箱提交后,就能正常跳转到password_reset_done页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:32:12