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

使用Django默认auth视图重置密码时出现password_reset_confirm反向解析错误

解决Django密码重置时password_reset_confirm反向解析失败的问题

别慌,我之前踩过一模一样的坑!这个报错跟你的应用名houses关系不大,问题出在password_reset_confirm这个视图的URL配置细节上——它有特殊要求,必须带参数,而且反向解析的时候要对应正确的命名规则或命名空间。下面是一步步的排查和解决方法:

  • 第一步:检查password_reset_confirm的URL参数是否正确配置
    Django的PasswordResetConfirmView必须接收uidb64和token两个参数,URL路径里必须明确写出这两个占位符,否则反向解析时找不到匹配的模式。你的urls.py里应该这样配置:

    from django.contrib.auth import views as auth_views
    
    urlpatterns = [
        # 密码重置请求页
        path('password-reset/', 
             auth_views.PasswordResetView.as_view(), 
             name='password_reset'),
        # 重置请求提交成功页
        path('password-reset/done/', 
             auth_views.PasswordResetDoneView.as_view(), 
             name='password_reset_done'),
        # 重点!必须包含<uidb64>和<token>参数
        path('password-reset-confirm/<uidb64>/<token>/', 
             auth_views.PasswordResetConfirmView.as_view(), 
             name='password_reset_confirm'),
        # 重置完成页
        path('password-reset-complete/', 
             auth_views.PasswordResetCompleteView.as_view(), 
             name='password_reset_complete'),
    ]
    

    确保这一行的参数占位符和视图名称完全正确,大小写也不能错。

  • 第二步:处理命名空间问题(如果你的应用用了namespace)
    如果你的houses应用是在项目根urls.py里通过namespace包含的,比如:

    path('houses/', include('houses.urls', namespace='houses')),
    

    那你需要在两个地方做调整:

    1. 配置PasswordResetView时,指定带命名空间的跳转链接:
      from django.urls import reverse_lazy
      
      path('password-reset/', 
           auth_views.PasswordResetView.as_view(
               success_url=reverse_lazy('houses:password_reset_done'),
               # 如果自定义了邮件模板,也要确保模板里的URL用命名空间
               email_template_name='registration/password_reset_email.html'
           ), 
           name='password_reset'),
      
    2. 在邮件模板(默认是registration/password_reset_email.html)里,反向解析时要加上命名空间前缀:
      {% url 'houses:password_reset_confirm' uidb64=uid token=token %}
      
  • 第三步:确认视图名称没有拼写错误
    检查所有用到password_reset_confirm的地方,确保名称完全一致——Django的反向解析对名称大小写、拼写非常敏感,多一个下划线少一个字母都会报错。

按照这几步调整后,应该就能解决反向解析找不到password_reset_confirm的问题了。

内容的提问来源于stack exchange,提问作者Adam LaMorre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:04:13