Django密码修改路径匹配失败,需配置带用户ID的URL路径
解决Django密码修改路径不匹配问题
问题根源
系统重定向时会跳转到带用户ID的路径(比如1/password/),但当前signup/urls.py里的密码修改路由仅配置了password/,未包含用户ID参数,同时主URL规则也没有匹配这类带ID的路径,导致出现URL未匹配的报错。
修复步骤
1. 更新signup/urls.py的路由配置
修改signup/urls.py,为密码修改路由添加用户ID参数,并完善视图的模板和成功跳转配置:
from django.urls import path from .views import UserSignup, ProfileEdit from django.contrib.auth import views as auth_views from django.urls import reverse_lazy urlpatterns = [ path('register/', UserSignup.as_view(), name='register'), path('edit_profile/', ProfileEdit.as_view(), name='edit_profile'), # 新增带用户ID的密码修改路由,指定模板和成功跳转地址 path('<int:pk>/password/', auth_views.PasswordChangeView.as_view( template_name='registration/change_password.html', success_url=reverse_lazy('home') ), name='change_password'), ]
提示:请确保
registration/change_password.html模板已创建,或者替换为你项目中实际使用的密码修改模板路径。
2. 修正密码修改入口的链接/表单路径
确保模板中触发密码修改的链接或表单action使用反向解析生成正确URL,避免直接硬编码路径:
<a href="{% url 'change_password' user.id %}">修改密码</a>
这样生成的路径会是/signup/[用户ID]/password/(前提是主URLconf已正确挂载signup路由),不会出现无前缀的[用户ID]/password/路径。
3. 确认主URLconf的signup路由挂载
检查项目主urls.py(carreview.urls),确保已正确包含signup的路由:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('blog.urls')), path('signup/', include('signup.urls')), # 这一行必须存在 ]
验证
重启Django服务后,访问signup/[你的用户ID]/password/,应该能正常加载密码修改表单,提交后会自动跳转到首页。
内容的提问来源于stack exchange,提问作者Clive
相关产品推荐
相关产品推荐

