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

18

これは、スライスフィルターを使用しないと、少し単純だと思います。

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

もう 1 つの方法は、ループ コントロール拡張機能を使用することです。

{% 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 %}

フィルターはリストを length のサブリストに分割batch(n)し、フィルターはこれらのサブリストの最初のものを選択します。xsnfirst

于 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

最後の要素を取得するには、配列リストから合計インデックスを取得します。

たとえば、オブジェクト名は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 に答える