如何反转 Django 模板中的 for 循环,然后对结果进行切片

Has*_*aig 3 django django-templates

在 Django 模板中,我遍历一组照片,并一张一张地显示它们。具体来说,现在我只有一组照片,包含 6 个对象。我像这样显示这 6 个对象:

{% for pic in picstream.photo_set.all reversed %}
    <img src="{{ pic.image_file.url }}"></img>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

添加reversed到语句中给了我所需排序的 6 个对象(即首先是最新的 id)。

接下来,我想从photo_set. 我添加|slice:":4"picstream.photo_set.all以实现此目的。问题是,它从我想要的排序中切断了前两个对象

这似乎也应已扭转列表的方式第一,和切片?需要一种简单的方法来做到这一点,而不会影响性能。

sol*_*oke 7

您可以使用查询集本身的方法,而不是使用模板标记的reversed参数:forreverse

{% for pic in picstream.photo_set.all.reverse|slice:":4" %}
    <img src="{{ pic.image_file.url }}"></img>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

如果您正在评估代码中其他地方的原始(非反向)查询集,那么这将导致第二个查询命中数据库。如果是这种情况,那么最好将逻辑移到视图代码本身或模板标记中。

  • 请注意,为了使用 `reverse`,必须在查询集或模型本身上定义一些排序,否则它不会产生任何影响。检查最后一段[这里](https://docs.djangoproject.com/en/1.9/ref/models/querysets/#reverse) (2认同)