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

3
我有一个Django站点,其中有一个侧边栏,包含不同的框,具体取决于页面。例如,“最近的评论”或“最新推文”或“特色故事”。这些框都需要运行数据库查询。
我可以简单地为每个页面向视图添加most_recent_comments和其他所需变量。但这感觉很脆弱。我想能够通过编辑模板来移动和更改框。
所以我另一个想法是,使用Context Processor将所有框可能需要的变量添加到每个页面中,但ORM是否足够聪明,只运行实际使用这些变量的页面的查询?或者即使页面上没有框,它也会访问数据库?
所以我认为我想要的是某种自定义标记,我只需要说{% most_recent_comments_box %},它就足够聪明,从数据库加载所需的任何变量,然后调用一个小模板文件。这是正确的方法吗?我该如何实现?
2个回答

5

这是自定义模板标签的一个使用案例。阅读这篇文章(由Django背后的人之一编写)。

自那篇文章以来,Django新增了包含标签快捷方式,实现了你提到的“调用小模板文件”的方法。


1
所以我的另一个想法是,我可以通过上下文处理器在每个页面上添加所有可能需要的变量,但ORM是否足够聪明,只运行实际使用这些变量的页面的查询?或者即使我在页面上没有框,它也会访问数据库吗?
是的,ORM会很聪明地做到这一点。Django QuerySets是惰性的:https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy

太棒了!你认为上下文处理器是最好的解决方案吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接