2009-09-17 41 views
1

我想在每4個元素後改變一個li的class屬性(這意味着第5,第9,第13個li元素類應該被改變)。如何在django模板中使用數學餘數?

我已經試過類似以下,但它給了我一個語法錯誤: 無法解析餘:從「%4」,forloop.counter%4'

{% for p in plist %} 
{% ifequal forloop.counter%4 1 %} 
    <li class="clear"> {{p.title}} </li> 
{% else %} 
    <li> {{p.title}} </li> 
{% endifequal %} 
{% endfor %} 

,我將不勝感激,如果有人會建議我一個工作解決方案。

回答

5

你不能在django模板中做類似的評估。 ifequal標籤只需要兩個參數,並對它們進行比較。你需要一些類型的過濾器。

但是,您可以使用循環標籤來代替:

{% for p in plist %} 
    {% if forloop.first %} 
     <li> {{p.title}} </li> 
    {% else %} 
     <li{% cycle '' '' '' ' class="clear"' %}> {{p.title}} </li> 
    {% endif %} 
{% endfor %} 

編輯:正如指出的那樣,最初的解決方案掃清了4,8,等等,而不是從5日起實施。我已經更新了包含Tolga更改的答案。

+0

清除了第4,第8,第12 ...而不是第5,第9,第13。 – 2009-09-17 13:00:46

+0

我已經更改了您的建議解決方案,並根據需要進行工作。 {%在plist中%P} \t {%如果forloop.first%} \t \t

  • {{p.title}}
  • \t {%其他%} \t \t
  • {{p.title}}
  • \t {%ENDIF%} {%ENDFOR%} 這將清除5the第九等.. 由於爲你們所有人提供寶貴的答案和意見。 – Tolga 2009-09-17 13:29:18

    +0

    謝謝Tolga,我已經更新了修改後的答案。 – 2009-09-18 07:04:55

    2

    邏輯會很複雜,但divisibleby過濾器可能會有所幫助。

    +0

    用的伎倆將是可行的,但是當你說出的複雜性會是這樣的,它可能會更好把它移到了看法。添加一個簡單的屬性更具可讀性,並且應該減少很多麻煩。 – Agos 2009-09-17 12:26:58

    +0

    我試過divisibleby,不幸的是它沒有給出我需要的結果。有了divisibleby;我可以改變屬性的第四,第八,而不是第五,第九.. – Tolga 2009-09-17 12:32:40

    +0

    所以你也可以使用'add'過濾器:'{%ifequal forloop.counter | add:「 - 1」| divisibleby:4%} 「可怕,但是做你想做的。 – 2009-09-17 12:50:04

    1

    你不想這樣做 - 這就是cycle的用途。

    {% for p in plist %} 
         <li{% ifnotequal forloop.counter 1 %}{% cycle ' class="clear"' '' '' '' %}{% endifnotequal %}>{{p.title}</li> 
    {% endfor %} 
    

    這個例子清除5,第9,第13等

    編輯:帽尖@cpharmston。

    +0

    {%ifnotequal forloop.counter 1%} {%cycle''''''class class =「clear」'%} {%endifnotequal%}? – 2009-09-17 12:53:07

    +0

    編輯,謝謝。 – 2009-09-17 12:59:36

    +0

    我剛剛看到您的編輯解決方案。我相信它也會提供相同的要求的結果。 – Tolga 2009-09-17 13:32:05

    7

    您可以使用forloop.counter0和過濾divisibleby:

    {% ifequal forloop.counter0|divisibleby:"4" %} 
    
    相關問題