Django中GoalUpdate视图重定向至GoalPageView时反向解析失败问题求助
解决Django中redirect反向解析视图失败的问题
我来帮你排查这个反向解析失败的问题,核心原因是你调用redirect()的参数传递方式不对,咱们一步步拆解解决:
问题根源
你当前的redirect()写法是:
return redirect(GoalPageView, kwargs={'username':username,'goal_id':goal_id})
这里错误地把参数包装在了kwargs字典里,导致Django试图将{'kwargs': {...}}作为单个关键字参数去匹配URL模式,但你的URL规则需要的是username和goal_id两个独立的参数,自然匹配失败,就出现了你看到的错误信息。
解决方案一:直接传递视图函数的参数
如果你坚持直接用视图函数作为redirect()的第一个参数,不需要额外套kwargs字典,直接把参数作为关键字参数传递即可:
def GoalUpdate(request,username,goal_id): # 你的业务代码 return redirect(GoalPageView, username=username, goal_id=goal_id)
解决方案二:使用URL名称反向解析(推荐)
Django推荐使用URL配置中定义的name属性来进行反向解析,这样即使视图函数的路径或名称发生变化,只要URL的name不变,代码就不需要修改,更具可维护性。
步骤1:优化URL名称(可选但推荐)
首先建议把URL的name改成Python规范的下划线命名(避免空格),修改你的URL配置:
urlpatterns = [ path('<username>/goals/', GoalsView, name='goals_list'), path('<username>/goals/<goal_id>/', GoalPageView, name='goal_page'), path('<username>/goals/<goal_id>/update/', GoalUpdate, name='goal_update'), ]
步骤2:修改redirect调用
用URL的name来反向解析,传递对应的参数:
def GoalUpdate(request,username,goal_id): # 你的业务代码 return redirect('goal_page', username=username, goal_id=goal_id)
如果你不想修改原有的URL名称,直接用你定义的'Goal Page'也是可以的,代码写成:
return redirect('Goal Page', username=username, goal_id=goal_id)
验证效果
修改后,Django就能正确匹配到people/<username>/goals/<goal_id>/这个URL模式,完成重定向。
内容的提问来源于stack exchange,提问作者SiN
相关产品推荐
相关产品推荐

