密码重置提交后出现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
相关产品推荐
相关产品推荐

