我正在尝试使用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 %}
这会返回整个列表。你如何剥离第一个或最后一个元素?
答案 0 :(得分:15)
在没有使用 slice 过滤器的情况下,我认为这有点简单:
{% for post in site.posts | reverse | list[0:4] %}
<li>» <a href="/{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
另一种方法是使用loop controls extension:
{% for post in site.posts | reverse %}
{%- if loop.index > 4 %}{% break %}{% endif %}
<li>» <a href="/{{ post.url }}">{{ post.title }}</a></li>
{%- endfor %}
答案 1 :(得分:11)
我也有同样的问题。这是一个简单的答案。这将检索site.posts中的最后五个项目:
{% for recent in site.posts[-5:] %}
{% for post in recent %}
<li> <a href="/{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
{% endfor %}
答案 2 :(得分:9)
我想出了以下代码:
{% for x in xs | batch(n) | first %}
...
{% endfor %}
batch(n)
过滤器将列表xs
拆分为长度为n
的子列表,然后first
过滤器会选择这些子列表中的第一个。
答案 3 :(得分:4)
尝试使用下标表示法,就像在普通的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>'
答案 4 :(得分:1)
@ 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 %}
您使用的任何一个都取决于您的偏好。
答案 5 :(得分:1)
对我来说,以下简单代码有效,并且不需要整个jinja过滤器链。只需使用列表过滤器转换为列表,然后进行正常的数组切片(注意parantheses):
{% for recent in (site.posts | list)[-5:] %}
{% for post in recent %}
<li> <a href="/{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
{% endfor %}
我遇到了同样的问题,但我的数据是按顺序而不是列表,这段代码处理这两个问题。
答案 6 :(得分:0)
{% for recent in site.posts[-5:][::-1] %}
{% for post in recent %}
<li> <a href="/{{ post['url'] }}">{{ post['title'] }}</a></li>
{% endfor %}
{% endfor %}
[-5:]
-最近5条帖子[::-1]
-倒序答案 7 :(得分:-1)
要获取最后一个元素,请从数组列表中获取总索引。
例如,您的对象名称是foundappointmentlog
。
{% set total=foundappointmentlog|length %} //it return length
{{foundappointmentlog[total-1].appointment_result}} // here you get your last value using index