2013-07-31 78 views
0

我需要在teplate中有一個變量,它基本上是for循環的計數器。問題是:我需要操作它,這取決於我正在處理的for-element,我將不得不重置計數器(for循環內的IF)。Django模板:變量有多靈活?

這是可行的在一個Django模板內?

這基本上是我想什麼:

{% i = 0 %} 
{% for l in list %} 
    {% if i == 5 %} 
     {% i = 0 %} 
     Do Something 
     <br> 
    {% else %} 
     {% i = i + 1 %} 
    {% endif %} 
{% endfor %} 

回答

1

你不能用內建的標籤:

http://www.mail-archive.com/[email protected]/msg27399.html

下面的代碼片段可能是一個很好的起點:

編輯:爲了記錄在案,OP需要一個條件與divisibleby。請參閱已接受的答案here以及此答案中的註釋。

+0

謝謝!我真的不喜歡Django模板的侷限性...... – averageman

+0

@averageman如果您可以在模板呈現之前對視圖中的迭代進行排序,會更容易。 –

+0

嗯,它已經排序,但我需要在HTML中每5個元素做一些事情(類似於每5個元素的
)。 – averageman

1

你想要什麼forloop.counter變量,Django的模板語言提供。

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

你會做這樣的事情:

{% for element in list %} 
    {% if forloop.counter > 5 %} 
     Do something 
    {% else %} 
     Do something else 
    {% endif %} 
{% endfor %} 

如果要循環做的事情,你基本上是做一個模運算符(http://en.wikipedia.org/wiki/Modulo_operation),不幸的是,Django的模板完全不是那麼回事有這個,但它確實允許一個'可以被'整除'。

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#divisibleby

所以你添加:

{% if {{ forloop.counter|divisibleby:"5" }} %} 
    {{ whatever }} 
{% endif %} 
+0

我看到了,但我需要有些東西來重置計數器有時候...... – averageman

+0

重置計數器是什麼意思?你究竟想要做什麼? –

+0

我編輯的問題,使其更清晰。 – averageman