如何在Jinja2中访问列表的一部分
我正在尝试使用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>» <a href="/{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
另一种方法是使用 循环控制扩展:
{% for post in site.posts | reverse %}
{%- if loop.index > 4 %}{% break %}{% endif %}
<li>» <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 %}