我正在运行查询以获取5个最新的News
项目。在我的模板中,我想在一个位置显示第一个项目,然后在页面的另一个位置显示剩余的四个项目。切入Django查询集而不触及数据库的最佳方式
在我的模板,我做这样的事情:
{% for n in news|slice:":1" %}
{{ n.headline }}
{% endfor %}
... more HTML ...
{% for n in news|slice:"1:" %}
{{ n.headline }}
{% endfor %}
当我看到在调试工具栏,这将导致两个数据库查询:一个LIMIT 1
,另一个为LIMIT 4 OFFSET 1
,但在其他方面一样。我很欣赏这是Django智能地只请求你实际使用的东西的方式,但在这种情况下,它似乎有点过分。做这种事最好的办法是什么?
从程序员的角度来看,您肯定会调用一次'for'循环两次,并且它们都被设置为调用查询的模板。你可以一次抓住所有5个,将它存储在客户端,并显示缓存副本的内容,而不是? – Droogans 2012-02-25 19:02:26
好吧,这就是我想要做的。在视图中,我抓取所有5个,但是查询集只在我尝试切割第一个时进行评估。然而,第一个for循环并不需要是循环,因为它只有1个项目。 – 2012-02-25 19:04:20