如何在Jinja2中访问列表的一部分

33 投票
8 回答
46964 浏览
提问于 2025-04-16 06:20

我正在尝试使用jinja2这个模板语言,从我的帖子列表中返回最后n个帖子(比如说,5个)。

{% for recent in site.posts|reverse|slice(5) %}
    {% for post in recent %}
        <li> <a href="/{{ post.url }}">{{ post.title }}</a></li>
    {% endfor %}
{% endfor %}

但是这样做却返回了整个列表。请问怎么才能去掉前面或后面的n个元素呢?

8 个回答

12

我写了以下代码:

{% for x in xs | batch(n) | first %}
    ...
{% endfor %}

这个 batch(n) 过滤器会把一个列表 xs 分成长度为 n 的小列表,然后 first 过滤器会选择这些小列表中的第一个。

18

我觉得这样做会简单一些,不用用到 slice 这个过滤器:

{% for post in site.posts | reverse | list[0:4] %}
  <li>&raquo; <a href="/{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}

另一种方法是使用 循环控制扩展

{% for post in site.posts | reverse %}
  {%- if loop.index > 4 %}{% break %}{% endif %}
  <li>&raquo; <a href="/{{ post.url }}">{{ post.title }}</a></li>
{%- endfor %}
23

我也遇到过同样的问题。其实答案很简单。这个代码可以获取网站上最后五个帖子:

{% for recent in site.posts[-5:] %}
    {% for post in recent %}
        <li> <a href="/{{ post.url }}">{{ post.title }}</a></li>
    {% endfor %}
{% endfor %}

撰写回答