14

jinjaテンプレートの1つに次のようなコードがあります

{% for post in posts %}
    {% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}

投稿の内容に応じてpost、コレクション内でそれぞれをレンダリングすることになっています。ごとに異なるテンプレート設定があります。テンプレートを持っていない場合は、投稿テンプレートに戻ります。posts.typepost.typedefault

ここで、投稿のインデックスを、によって提供される投稿テンプレート内に下から表示したいと思いますloop.revindex。しかし、何らかの理由でloop.revindex、投稿テンプレート内で使用すると、というエラーが表示されますUndefinedError: 'loop' is undefined

それで、dテンプレートloopでは利用できませんか?includeこれは仕様によるものですか?これを利用できないようにテンプレートを整理する方法に何か問題がありますか?

編集さて、テンプレートを含める前に、forループで回避策を考え出しました。

{% set post_index = loop.revindex %}

post_index投稿テンプレート内で使用します。理想的ではありませんが、唯一の方法のようです。私はまだあなたの解決策を知りたいです。

編集2もう1つ、 dテンプレートpost内の変数にはアクセスできますが、変数にはアクセスできません。includeloop

4

2 に答える 2

8

{% with %}ステートメントで可能かもしれない場合。

これを試して:

{% with %}
    {% set loop_revindex = loop.revindex %}
    {% include ... %}
{% endwith %}

loop.revindex含まれているテンプレートで使用する代わりに、を使用してくださいloop_revindex

于 2012-01-11T12:08:59.170 に答える
1

loop別のオプションは、ローカル変数を次のように設定して、含まれているテンプレートに変数全体を渡すことです。loop

{% for post in posts %}
    {% set post_loop = loop %}
    {% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}

これにより、すべてのプロパティにアクセスできるようにloopなり、含まれているテンプレートで変数が何であるかがより明確になります。

于 2014-09-03T15:40:26.353 に答える