33

我正在尝试使用 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 个元素?

4

8 回答 8

22

我也有同样的问题。这是一个简单的答案。这将检索 site.posts 中的最后五个项目:

{% for recent in site.posts[-5:] %}
    {% for post in recent %}
        <li> <a href="/{{ post.url }}">{{ post.title }}</a></li>
    {% endfor %}
{% endfor %}
于 2013-04-22T18:45:03.430 回答
18

这有点简单,我认为不使用切片过滤器:

{% 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 %}
于 2010-11-04T20:04:45.087 回答
12

我想出了以下代码:

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

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

于 2012-05-23T23:31:47.863 回答
5

尝试下标符号,就像在普通 Python 中一样。例如,获取最后 5 个帖子并以相反的顺序显示它们:

import jinja2
tmpl = """\
{%- for col in posts[-5:]|reverse|slice(3) -%}
    {%- for post in col -%}
        {{ post }}
    {%- endfor -%}
    <br>
{%- endfor -%}"""
jinja2.Template(tmpl).render(posts=[1,2,3,4,5,6,7])

产生:u'76<br>54<br>3<br>'

于 2010-11-03T21:35:32.330 回答
4

对我来说,下面的简单代码可以工作,不需要整个 jinja 过滤器链。只需使用列表过滤器转换为列表,然后进行正常的数组切片(注意括号):

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

我遇到了同样的问题,但是我的数据是按顺序排列的,而不是按列表排列的,这段代码可以同时处理这两种情况。

于 2017-04-04T13:29:28.800 回答
2

@Andrey 的回答有正确的想法。但是,要完全解决您的问题:

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

或者:

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

您使用哪一种取决于您的喜好。

于 2017-02-22T18:54:27.373 回答
1
{% for recent in site.posts[-5:][::-1] %}
    {% for post in recent %}
        <li> <a href="/{{ post['url'] }}">{{ post['title'] }}</a></li>
    {% endfor %}
{% endfor %}
  1. [-5:] - 最后 5 个帖子
  2. [::-1]- 相反的顺序
于 2020-08-26T17:52:32.287 回答
-2

要获取最后一个元素,请从数组列表中获取总索引。

例如,您的对象名称是foundappointmentlog

{% set total=foundappointmentlog|length %} //it return length
{{foundappointmentlog[total-1].appointment_result}}  // here you get your last value using index 
于 2019-07-25T08:37:04.650 回答