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

Django3.2及以上版本模板中view.kwargs无法获取URL参数问题咨询

问题原因

{{ view.kwargs.kwarg_name }} 这个语法在Django 3.2+中并没有被移除,你用不了的核心原因是该语法仅适用于类视图(CBV),你当前用的是函数视图(FBV),本身默认不支持该调用方式。

具体细节说明:

Django 只有在使用基于类的视图时,才会自动将视图实例作为view变量注入模板上下文,该实例的kwargs属性会存储所有URL捕获的命名参数。而你现在写的是函数视图,调用render渲染模板时默认不会往上下文里传入view变量,自然无法访问到view.kwargs下的属性。

你之前能正常使用,大概率是之前的业务场景用的是类视图,或是你之前自定义了上下文处理器手动将参数注入到了全局上下文,并非版本变更导致特性被移除。

另外你提供的URL配置代码还有两处语法错误,也可能导致路由匹配异常、参数无法正常传递:

  • 导入语句写法错误,正确写法是from .views import GetSomething,而非你写的import GetSomething from .views
  • 路由配置列表名要求为复数urlpatterns,你写的是单数urlpattern

解决办法

方案1:保持函数视图,手动传参(更简单)

直接把URL捕获的参数手动传入模板上下文即可,模板中无需通过view调用:

def GetSomething(request, code):
   return render(request, "some template here", {"code": code})

模板里直接用{{ code }}即可获取参数值。

方案2:改用类视图,保留原调用方式

如果要继续使用{{ view.kwargs.code }}的写法,把函数视图改成类视图即可:

from django.views.generic import TemplateView

class GetSomething(TemplateView):
    template_name = "some template here"

对应修改URL配置:

from .views import GetSomething

app_name = "some_app_name_here"
urlpatterns = [
   path("link/<int:code>/", GetSomething.as_view(), name="some_cool_name")
]

修改后原模板的{{ view.kwargs.code }}写法在Django 3.2及更高版本中都可以正常生效。

内容的提问来源于stack exchange,提问作者Jet Ezra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:15:07