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

密码重置提交后出现NoReverseMatch错误(/users/reset/done/)求助

解决Django密码重置后NoReverseMatch at /users/reset/done/错误

以下是针对该问题的排查和解决步骤:

  • 检查用户应用urls.py的路由命名配置
    确保密码重置相关路由正确设置了name属性,这是Django反向解析URL的关键。示例配置如下:

    from django.contrib.auth import views as auth_views
    
    urlpatterns = [
        # 其他业务路由
        path('reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
        path('reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
        path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
        path('reset/complete/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
    ]
    
  • 确认根urls.py的路由包含逻辑
    确保根路由文件中正确引入了用户应用的路由,且无命名空间冲突:

    urlpatterns = [
        # 其他项目路由
        path('users/', include('users.urls')),
    ]
    

    若使用了命名空间(如include(('users.urls', 'users'))),则所有反向解析URL时必须带上命名空间,比如模板中写{% url 'users:password_reset_done' %}。

  • 检查自定义视图的success_url设置
    若你自定义了密码重置相关视图,要保证success_url通过reverse_lazy指向正确的命名URL,而非硬编码路径:

    from django.contrib.auth.views import PasswordResetView
    from django.urls import reverse_lazy
    
    class CustomPasswordResetView(PasswordResetView):
        success_url = reverse_lazy('password_reset_done')  # 带命名空间则写'users:password_reset_done'
    
  • 替换模板中的硬编码链接
    自定义模板里的跳转链接必须使用{% url %}模板标签生成,禁止直接写/users/reset/done/这类硬编码路径,避免路由结构变更后出现匹配错误。

  • 验证URL命名唯一性
    用python manage.py show_urls命令查看项目所有已注册的URL及其名称,确保password_reset_done命名唯一且指向/users/reset/done/路径,避免其他应用的同名路由干扰反向解析。

内容的提问来源于stack exchange,提问作者Aman Agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:01:05