2009-06-07 30 views
3

我輸出了一系列的Django的對象模板:Django for loop有多大的靈活性?

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

但我想只輸出這些前五,然後把剩餘的單獨<DIV>.的想法是,我可以隱藏下半部分直到需要。

我設想這樣的事情,但需要限制重複的元素:

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

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

是否有可能僅在模板內做到這一點?它是演示邏輯,所以我寧願不污染視圖。

回答

16

你可以使用slice

{% 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> 
2

當然,例如,你可以做循環兩次,並在其中使用合適的if結構forloop.counter - 第一次> 5(記得這是基於1的只有做的東西時,它的<= 5,僅僅是第二次當它是 - - 如果你想從0開始,改用forloop.counter0)。

7

與模板限制掙扎往往是一個跡象,如果你沒有在你的看法更多的工作生活可能比較簡單:

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

我不是說這比上面的切片過濾解決方案要好得多,但通常值得考慮的是將模板傳遞給一個上下文對象,並且所有的設置都很好。如果稍後邏輯變得更復雜,它可以讓你更容易適應。

呈現邏輯在一個視圖中很好地放置。我並不特別將其視爲「污染」。

+1

這種方法的另一個好處是可以很容易地在模板中添加一個條件,以避免在沒有任何隱藏的情況下顯示「顯示隱藏」。 – 2009-06-07 23:24:04