2012-05-05 12 views
0

を分割、私はいくつかのアイテムを含むリストを渡します。Djangoテンプレートと私の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>に配置する必要があります。 {% for item in my_list %}を使用してこれらの変数を2つごとにループおよび分割するにはどうすればよいですか?

答えて

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コードを書くように意図的に制限しています。

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

それはニックのソリューションよりもカップルより多くの行だが、これらの要素は自然にそれらに参加する性質を持っている場合をこれはより洗練されたソリューションだと私は言います。

0

あなたはあなたの3つのバッチとし、各バッチをループを与えるサイズ2のバッチで6つの要素のあなたの総リストを列挙することができます。

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

カスタムフィルタはこのようなものになることができます。あなたのHTML内

@register.filter 

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

 {% for batch in yourlist|batch:2%} 
     <li> 
      {% for element in batch %} 
       <div>{{element}}</div> 
      {% endfor %} 
     </li> 
     {% endfor %} 
関連する問題