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

解决Django中/polls/reset-password/路径的NoReverseMatch错误

解决Django密码重置的NoReverseMatch错误

我之前也踩过这个坑,大概率是Django内置的password_reset视图找不到password_reset_done的路由导致的,下面给你详细的排查和解决步骤:

1. 给password_reset视图显式指定跳转目标

Django的password_reset内置视图默认会尝试反向解析password_reset_done这个URL名称,但如果你的路由是在应用级别的urls.py(比如你的polls应用)里定义的,且项目主urls.py给polls加了命名空间,内置视图会找不到不带命名空间的password_reset_done。

你需要修改polls/urls.py里的reset-password路由,显式传递post_reset_redirect参数:

url(r'^reset-password/$', password_reset, {
    # 如果你用了自定义的密码重置模板,加上这行;没有的话可以省略
    'template_name': 'polls/password_reset.html',
    # 没有命名空间就写'password_reset_done',有命名空间要写成'polls:password_reset_done'
    'post_reset_redirect': 'password_reset_done'
}, name='reset_password'),

2. 检查项目主urls.py的命名空间配置

打开项目根目录的urls.py,确认你包含polls路由的方式:

  • 如果是带命名空间的配置:

    from django.conf.urls import include, url
    urlpatterns = [
        url(r'^polls/', include('polls.urls', namespace='polls')),
        # ...其他路由
    ]
    

    那上面的post_reset_redirect必须改成'polls:password_reset_done',后续的password_reset_confirm、password_reset_complete也要统一使用命名空间格式。

  • 如果没有加命名空间,只要确保password_reset_done的name和你配置的一致(你的代码里已经正确设置了)即可。

3. 检查自定义模板的URL调用(如果有)

如果你自己写了password_reset.html模板,里面的表单跳转或链接要正确使用URL名称:

  • 无命名空间:{% url 'password_reset_done' %}
  • 有命名空间:{% url 'polls:password_reset_done' %}

4. 补充完整密码重置的后续路由

你目前只配置了前两步的路由,后续的重置确认和完成页面也需要补上,不然重置邮件里的链接会报错,完整配置参考:

# 密码重置确认路由
url(r'^reset-password/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', 
    password_reset_confirm, 
    {'post_reset_redirect': 'password_reset_complete'},
    name='password_reset_confirm'),
# 密码重置完成路由
url(r'^reset-password/complete/$', 
    password_reset_complete, 
    {'template_name': 'polls/password_reset_complete.html'},
    name='password_reset_complete'),

按照上面的步骤调整后,应该就能解决NoReverseMatch的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:29:37