0

私の django ビューでは、いくつかのアイテムを含むリストを渡します。

私のhtmlデザインは次のようなものです:

<ul>
 <li>
   <div>1st item</div>
   <div>2nd item</div>
</li> 
 <li>
   <div>3th item</div>
   <div>4th item</div>
 </li> 
 <li>
   <div>5th item</div>
   <div>6th item</div>
 </li>
</ul>

2 つのアイテムごとに、それらを分割して新しい に入れる必要があるパターンがわかります<li></li>。を使用して、これらの変数を 2 つごとにループして分割するにはどうすればよい{% for item in my_list %}ですか?

4

4 に答える 4

0

特にエレガントではなく、テストもされていないこのようなものを試すことができます!

{% if list_of_items %}
<ul>
<li>
  {% for item in list_of_items %}
  <div>{{ item }}</div>
  {% cycle '' '</li><li>' %}
  {% endfor %}
</li>
</ul>
{% endif %}

最初にビュー内のリストを再配置してリストのリストにするか、または独自のバッチフィルターを作成することができます。

私の知る限り、あなたが望むことを行うための本当に簡単なdjangoテンプレートの方法はありません-Djangoテンプレートは、代わりにpythonコードを書くことを奨励するために意図的に制限されています。

于 2012-05-05T16:02:39.243 に答える
0

アイテムに、それらを自然にペアにグループ化するプロパティがある場合は、次を使用できますregroup

{% if list_of_items %}
    <ul>
    {% regroup list_of_items by property as item_chunks %}
    {% for chunk in item_chunks %}
        <li>
        {% for item in chunk.list %}
        {{ item }}
        {% endfor %}
        </li>
    {% endfor %}
    </ul>
{% endif %}

これは Nick のソリューションより数行多いですが、これらの要素が自然に結合するプロパティを持っている場合、これはよりエレガントなソリューションであると言えます。

于 2012-05-06T03:50:30.863 に答える
0

サイズ 2 のバッチで 6 つの要素の合計リストを列挙すると、3 つのバッチが得られ、各バッチをループすることができます。

これを行うには、templatetags ディレクトリにカスタム バッチ フィルターを追加します。カスタム タグ/フィルタを追加するためのドキュメントは次のとおりです。 https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/

カスタム フィルターは次のようになります。

@register.filter

def batch(iterable, n=1):
    l = len(iterable)
    for ndx in range(0, l, n):
        yield iterable[ndx:min(ndx + n, l)]

あなたのhtmlで

     {% for batch in yourlist|batch:2%}
        <li>
          {% for element in batch %}
              <div>{{element}}</div>
          {% endfor %}
        </li>
      {% endfor %}
于 2016-03-09T14:22:16.817 に答える