Modulus % in Django template
You need divisibleby, a built-in django filter.
{% 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 %}
You can't use the modulus operator in Django template tags, but it would be easy enough to write a filter to do so. Something like this should work:
@register.filterdef modulo(num, val): return num % val
And then:
{% ifequal forloop.counter0|modulo:4 0 %}
You could even do something like this, instead:
@register.filterdef modulo(num, val): return num % val == 0
And then:
{% if forloop.counter0|modulo:4 %}
Or you could use the cycle
tag:
<div class="post width1 height2 column {% cycle 'first' '' '' '' %}">
Bootstrap rows and columns example. New row every 4 items. Also close last row even if there are less than 4 items.
myapp/templatetags/my_tags.py
from django import templateregister = template.Library()@register.filterdef modulo(num, val): return num % val
html template
{% load my_tags %}{% for item in all_items %} {% if forloop.counter|modulo:4 == 1 %} <div class="row"> {% endif %} <div class="col-sm-3"> {{ item }} </div> {% if forloop.last or forloop.counter|modulo:4 == 0 %} </div> {% endif %}{% endfor %}