Modulus % in Django template Modulus % in Django template python python

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 %}