我正在运行查询以获取5个最新的News
项。在我的模板中,我想在一个位置显示第一个项目,然后在页面下方显示剩余的4个项目。
在我的模板中,我做了类似的事情:
{% 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的智能方式,只是请求你实际使用的东西,但在这种情况下,它似乎有点过分。做这种事的最好方法是什么?
答案 0 :(得分:10)
转换为视图中的序列,然后对序列进行切片。
var = list(somequery[:5])
答案 1 :(得分:6)
您只需要强制查询集在切片之前评估自己。这可以像在视图中调用len()
一样简单地完成,然后再将其传递给上下文。
Django文档有一个complete list of everything that causes a queryset to evaluate。只需从该列表中做一些事情就可以了。