如何限制列表对象的模板端而不是视图端


83

限制对象的一种方法是对这样的函数添加限制

def ten_objects():
    obj = Model.objects.all()[0:10]  # limit to 10
    return {'objects': obj}

但是,如何在模板而不是视图中实现呢?

我知道您可以过滤模板中的对象并限制字符,但是实际上如何限制循环中显示的对象数量。通过模板。例如,以下代码将遍历所有对象。

    <ul>
     {% for new in news %}
      <li>
       <p>{{ news.title }}</p>
       <p>{{ news.body }}</p>
      </li>
     {% endfor %}
    </ul>

我如何打破循环,在第3个对象/项目之后说。以及如何在模板中进行操作。提前致谢。


Answers:


178

slice您可以在模板中使用一个过滤器。这与在视图中切片完全相同。

{% for new in news|slice:":10" %}

2
如果您有使用场景,{% for object in user.objects.all %} 可以使用{% for object in user.objects.all|slice:":10" %}
Samir Tendulkar '18

请给我django的slice文档链接。
等于

1
从我上面的答案中可以看出来。
丹尼尔·罗斯曼

我知道了@Daniel。我在github django存储库中搜索slice,但是我发现slice_filter不是slice。
等于

12

您要使用切片模板过滤器

这是您更改为使用它的示例:

<ul>
{% for new in news|slice:":3" %}
<li>
<p>{{ new.title }}</p>
<p>{{ new.body }}</p>
</li>
{% endfor %}
</ul>

1
我知道我有点唠叨,但它应该是:{{ new.title}}{{ new.body }}
胡萨姆

这是比接受的答案更完整的代码示例,这是更有用的答案,因此我投票支持并解释原因
Keith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.