[Django]-How to use math remainder in django template?

5πŸ‘

βœ…

You can’t do evaluations like that in the django template. The ifequal tag expects only two parameters, and compares them. You would need some type of filter.

However, you could use the cycle tag instead:

{% for p in plist %} 
    {% if forloop.first %} 
        <li> {{p.title}} </li>
    {% else %}
        <li{% cycle '' '' '' ' class="clear"' %}> {{p.title}} </li> 
    {% endif %}
{% endfor %}

EDIT: As pointed out, the original solution cleared the 4, 8th, etc, instead of from the 5th onwards. I have updated the answer to include the changes by Tolga.

πŸ‘€Andre Miller

12πŸ‘

You can use forloop.counter0 and filter divisibleby:

{% ifequal forloop.counter0|divisibleby:"4" %}
πŸ‘€Griffosx

4πŸ‘

I struggled with this for a bit, trying to limit Bootstrap cards to 3 per card-deck.

This works in Django 2.1 and above, to limit a row to groups of 3:

{% ifequal forloop.counter|divisibleby:"3" True %}   
πŸ‘€Jorge

2πŸ‘

The logic would be complex, but the divisibleby filter might help.

πŸ‘€c_harm

1πŸ‘

You don’t want to do it like that – that’s what cycle is for.

{% for p in plist %}
        <li{% ifnotequal forloop.counter 1 %}{% cycle ' class="clear"' '' '' '' %}{% endifnotequal %}>{{p.title}</li>
{% endfor %}

That example clears the 5th, 9th, 13th etc.

Edit: hat tip @cpharmston.

Leave a comment