私は django テンプレートにかなり慣れていないので、いくつかの基本を理解していないという印象があります。
要素のリストがあり、前の要素と次の要素に対する条件に基づいてリストの要素をレンダリングする必要があります (次または前の要素が非表示になっている場合は、現在の要素を境界要素としてマークする必要があります)。 .
for
Django テンプレートのループ内で前の要素と次の要素を参照するにはどうすればよいですか?
私は django テンプレートにかなり慣れていないので、いくつかの基本を理解していないという印象があります。
要素のリストがあり、前の要素と次の要素に対する条件に基づいてリストの要素をレンダリングする必要があります (次または前の要素が非表示になっている場合は、現在の要素を境界要素としてマークする必要があります)。 .
for
Django テンプレートのループ内で前の要素と次の要素を参照するにはどうすればよいですか?
とのカスタム テンプレート フィルタを作成できます。next
previous
def next(value, arg):
try:
return value[int(arg)+1]
except:
return None
そしてテンプレートで:
{% for ... %}
{% with list|next:forloop.counter0 as next %}
{% if next.is_hidden %}
...
{% endif %}
{% endwith %}
{% endfor %}
しかし、他の人が言ったように、おそらくあなたのビューを介してこれを行うよりエレガントなソリューションがあります
組み込みのテンプレート タグで厳密にこれを行うことはできません。いくつかの Python を含める必要があります。
1 つの方法はzip
、それ自体をリストに追加することです。
new = ([(None, orig[0], orig[1])] +
zip(orig, orig[1:], orig[2:]) +
[(orig[-2], orig[-1], None)])
それをテンプレートに渡し、次のようにループします。
{% for prev, current, next in new %}
{% if prev.hidden or next.hidden %}
BORDER
{% endif %}
{{ current }}
{% endfor %}
この種のロジックに Django テンプレートを使用するべきではありません。あなたはそれを処理するあなたの見解を持っています。if
リストのどの要素が境界線であるかを把握し、単純なステートメントを使用してテンプレートで処理できる追加のパラメーターを渡します。例えば:
{% for element,is_border in data.items %}
{% if is_border %}
do something
{% endif %}
{% endfor %}
これを行うことができる同様の方法がたくさんあります。ほんの一例を紹介しました。
それを行う外部タグを作成できますが、軽量になるように構築されたdjangoテンプレートシステムには、forループにそのような機能がありません。