2011-07-17 51 views
1

我有一个有各种不同的盒子,可以去它根据网页上的侧边栏的Django网站调用的数据库查询。例如,“最新评论”或“最新推文”或“精选故事”。这些框都需要运行数据库查询。Django的:从模板

我可以简单地增加一个most_recent_comments和任何其他变量都需要查看每一页。但是这感觉很脆弱。我希望能够通过编辑模板来移动和更改框。

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

所以我想我想要的是某种自定义标记,我可以只说{%most_recent_comments_box%},它足够聪明,可以从数据库中加载所需的任何变量,然后调用一个小模板文件。这是正确的方法吗?我如何实现这一目标?

回答

1

所以我其他的想法是,我可以补充一点,所有的箱子可能需要用上下文处理器的每个页面的所有变量,但它是ORM足够聪明,只运行查询的实际使用这些变量页面?或者即使我在页面上没有框,它会打到数据库?

是的,ORM将是足够聪明,这样做。 Django QuerySets是懒惰的:https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy

+0

好极了!所以你认为上下文处理器是最好的解决方案? – Eli

4

这是用例的自定义模板标签。阅读this article(由后面的Django的人一个书面)。

任一方式的Django因为这文章写的是inclusion tag快捷方式,它实现了你所提到的“拨打一个小模板文件”的做法。