Módulo% en plantilla Django

Estoy buscando una manera de usar algo como el operador de módulo en django. Lo que estoy tratando de hacer es agregar un nombre de clase a cada cuarto elemento en un bucle.

Con módulo se vería así:

{% for p in posts %} 

p.title

{% endfor %}

Por supuesto, esto no funciona porque% es un carácter reservado. Hay alguna otra manera de hacer esto?

Necesitas divisible por , un filtro django incorporado.

 {% for p in posts %} 

p.title

{% endfor %}

No puede utilizar el operador de módulo en las tags de plantilla de Django, pero sería bastante fácil escribir un filtro para hacerlo. Algo como esto debería funcionar:

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

Y entonces:

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

Incluso podrías hacer algo como esto, en su lugar:

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

Y entonces:

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

O podrías usar la etiqueta de cycle :

 

Parece que deberías usar la etiqueta de ciclo. Etiquetas de plantilla incorporadas

Bootstrap ejemplo de filas y columnas. Nueva fila cada 4 artículos. También cierre la última fila incluso si hay menos de 4 elementos.

myapp / templatetags / my_tags.py

 from django import template register = template.Library() @register.filter def modulo(num, val): return num % val 

plantilla html

 {% load my_tags %} {% for item in all_items %} {% if forloop.counter|modulo:4 == 1 %} 
{% endif %}
{{ item }}
{% if forloop.last or forloop.counter|modulo:4 == 0 %}
{% endif %} {% endfor %}