在模板中使用Django查询集会查询数据库吗?

6 投票
1 回答
955 浏览
提问于 2025-04-18 07:13

模板中的值标签在调用非上下文值时,会强制 Django 访问数据库吗?

举个例子:

{{ request.user.username }} 是用来显示当前登录用户的用户名。但是像 {{ request.user.someobject_set.all }} 这样的调用,会把一个外键关联的查询集直接放到模板里。

用户的 someobject 集合是默认放进上下文的吗?还是说我需要在视图的 def get_context_data 方法里手动添加一个查询集?另外,任何其他通过关联找到的非请求对象也是这样吗?

下面的文档展示了在原始 Python 中查询集何时被评估,但并没有真正提到模板和视图之间的关系。


https://docs.djangoproject.com/en/1.6/ref/models/querysets/#when-querysets-are-evaluated

1 个回答

9

在模板中评估东西和在其他地方评估是完全一样的。当模板被渲染时,变量会被解析。如果所指的对象需要查数据库,那么这个对象就会去查。这里并不是模板在做什么聪明的事情,它只是告诉 request.user 去获取它的 someobject_set 属性,然后对这个属性调用 all,这和在Python代码中发生的事情是完全一样的。

撰写回答