2009-06-07 3 views
3

私は、テンプレート内のオブジェクトのDjangoのシリーズを出力しています:Django forループにはどのくらいの柔軟性がありますか?

{% for obj in list %} 
    ... 
{% endfor %} 

しかし、私は、出力のみこれらの最初の5つに好きその後、別々の<DIV>.アイデアであることに残りを入れて、私ができることだろう必要になるまで後半を隠す。

私はこのような何かを考えるが、反復要素を制限する必要があります。

{% for obj in list %} 
    ... 
{% endfor %} 

<a href="" onclick="unhide()">Show hidden</a> 
<div id="hidden"> 
    {% for obj in list %} 
     ... 
    {% endfor %} 
</div> 

、それだけではテンプレート内にこれを行うことは可能ですか?それはプレゼンテーションロジックなので、私はむしろその視点を汚染しないだろう。

答えて

16

あなたはsliceを使用することができますこれは上記のスライスフィルタソリューションよりも必ずしも優れていると言っていますが、テンプレートをすべて渡してコンテキストオブジェクトをうまく設定することを検討する価値があります。論理が後でさらに複雑になるならば、より簡単に適応することができます。

プレゼンテーションロジックは、ビュー内ではきれいに表示されます。私は特にそれを「汚染」とは見なしていません。

2

たとえば、あなたが二回のループを行うことができますし、その中で、適切なif構造でforloop.counterを使用し、確かに - それは<= 5だときだけのものを行うための最初の時間を、二時間、それは> 5だときにだけ(それは1ベースです覚えて - - 0ベースのものを使用する場合は、代わりにforloop.counter0を使用してください)。

context = { 
    'visible_list': mylist[:5], 
    'hidden_list': mylist[5:] 
} 

私はない:多くの場合、あなたはあなたのビューで多くの作業をした場合の人生は単純かもしれないという徴候である可能性がありますテンプレートの制限に苦しんで

{% for obj in list|slice:":5" %} 
    ... 
{% endfor %} 

<a href="" onclick="unhide()">Show hidden</a> 
<div id="hidden"> 
    {% for obj in list|slice:"5:" %} 
     ... 
    {% endfor %} 
</div> 
7

+1

このアプローチには、隠されていない場合に「隠して表示」を避けるためにテンプレートに条件を追加するのが非常に簡単になるという追加の利点があります。 –

関連する問題