Django模板中的模量%

我正在寻找一种方式来使用类似django中的模数运算符。 我正在试图做的是给循环中的每个第四个元素添加一个类名。

与模数它看起来像这样:

{% for p in posts %} <div class="post width1 height2 column {% if forloop.counter0 % 4 == 0 %}first{% endif %}}"> <div class="preview"> </div> <div class="overlay"> </div> <h2>p.title</h2> </div> {% endfor %} 

当然这不起作用,因为%是一个保留字符。 有没有其他方法可以做到这一点?

你需要divisibleby ,一个内置的Djangofilter。

 {% for p in posts %} <div class="post width1 height2 column {% if forloop.counter0|divisibleby:4 %}first{% endif %}"> <div class="preview"> </div> <div class="overlay"> </div> <h2>p.title</h2> </div> {% endfor %} 

你不能在Django模板标签中使用模数运算符,但是编写一个filter就足够简单了。 像这样的东西应该工作:

 @register.filter def modulo(num, val): return num % val 

接着:

 {% ifequal forloop.counter0|modulo:4 0 %} 

你甚至可以做这样的事情,而不是:

 @register.filter def modulo(num, val): return num % val == 0 

接着:

 {% if forloop.counter0|modulo:4 %} 

或者你可以使用cycle标签:

 <div class="post width1 height2 column {% cycle 'first' '' '' '' %}"> 

这听起来像你应该只使用循环标签。 内置模板标签