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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:19:05