3

私は django テンプレートにかなり慣れていないので、いくつかの基本を理解していないという印象があります。

要素のリストがあり、前の要素と次の要素に対する条件に基づいてリストの要素をレンダリングする必要があります (次または前の要素が非表示になっている場合は、現在の要素を境界要素としてマークする必要があります)。 .

forDjango テンプレートのループ内で前の要素と次の要素を参照するにはどうすればよいですか?

4

4 に答える 4

11

のカスタム テンプレート フィルタを作成できます。nextprevious

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

しかし、他の人が言ったように、おそらくあなたのビューを介してこれを行うよりエレガントなソリューションがあります

于 2012-04-09T19:44:44.453 に答える
3

組み込みのテンプレート タグで厳密にこれを行うことはできません。いくつかの 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 %}
于 2012-04-09T19:42:55.780 に答える
1

この種のロジックに Django テンプレートを使用するべきではありません。あなたはそれを処理するあなたの見解を持っています。ifリストのどの要素が境界線であるかを把握し、単純なステートメントを使用してテンプレートで処理できる追加のパラメーターを渡します。例えば:

{% for element,is_border in data.items %}
 {% if is_border %}
   do something
 {% endif %}
{% endfor %}

これを行うことができる同様の方法がたくさんあります。ほんの一例を紹介しました。

于 2012-04-09T19:42:07.183 に答える
1

それを行う外部タグを作成できますが、軽量になるように構築されたdjangoテンプレートシステムには、forループにそのような機能がありません。

于 2012-04-09T19:43:21.460 に答える