Django:从模板调用数据库查询

时间:2011-07-17 16:32:19

标签: django templates

我有一个Django网站,其侧边栏有各种不同的框,可以根据页面进入。例如,“最近的评论”或“最新推文”或“精选故事”。这些框都需要运行数据库查询。

我可以简单地为每个页面的View添加一个most_recent_comments和其他所需的变量。但这感觉很脆弱。我希望能够通过编辑模板来移动和更改框。

所以我的另一个想法是,我可以使用Context Processor将所有框所需的所有变量添加到每个页面,但ORM是否足够智能,只对实际使用这些变量的页面运行查询?或者,即使页面上没有框,它是否会打到数据库?

所以我想我想要的是某种自定义标签,我可以说{%most_recent_comments_box%}并且它足够智能从数据库加载它需要的任何变量然后调用一个小模板文件。这是正确的方法吗?我该如何做到这一点?

2 个答案:

答案 0 :(得分:4)

这是自定义模板标记的 用例。阅读this article(由Django背后的人之一撰写)。

自撰写该文章以来,Django的一个新增功能是inclusion tag快捷方式,它实现了您提到的“调用一个小模板文件”方法。

答案 1 :(得分:1)

  

所以我的另一个想法是,我可以使用Context Processor将所有框所需的所有变量添加到每个页面,但ORM是否足够智能,只对实际使用这些变量的页面运行查询?或者,即使页面上没有框,它是否会打到数据库?

是的,ORM足够聪明,可以做到这一点。 Django QuerySets很懒:https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy