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

已注释DetailView的get_context_data仍可调用{{ object }}的原因咨询

为什么注释get_context_data后模板仍能调用{{ object }}?

这事儿其实很好理解——Django的DetailView本身就自带了默认的get_context_data实现,根本不需要咱们非得自己重写它!

当你把自己写的get_context_data注释掉之后,视图会自动去调用父类(DetailView继承的一系列基类,比如BaseDetailView和ContextMixin)里的默认方法。这个默认方法会帮你完成两件关键的事:

  • 调用get_object()方法,从你指定的queryset = product.objects.all()里匹配出对应的产品对象(根据URL里的slug或者pk参数)
  • 把这个获取到的对象自动放进上下文(context)字典里,默认的键就是object,同时还会额外添加一个以模型小写名称命名的键(比如你的模型是product,那上下文里还会有product这个键,模板里也能调用{{ product }})

你之前重写get_context_data只是在父类的基础上做额外操作,但即使不重写,父类的逻辑已经足够把核心的对象数据传递给模板了,所以模板里的{{ object }}自然还能正常工作~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:21:12