For-looping по три столбца в строке в шаблоне Django
Я пытаюсь получить данные из базы данных и отобразить их в виде строк из трех столбцов. Я перепробовал столько методов, сколько смог найти, в итоге рендеринг получился с таким кодом:
<div class='container'>
<div class="row">
{% for category in categories %}
{% if not forloop.counter0|divisibleby:"3" %}
<div class="col-6 col-md-4">
<h3>{{category.category_name}}</h3>
{% for page in category.page_set.all %}
<p>{{page.page_title}}</p>
{% endfor %}
</div>
{% else %}
<div class="row">
<div class="col-6 col-md-4">
<h3>{{category.category_name}}</h3>
{% for page in category.page_set.all %}
<p>{{page.page_title}}</p>
{% endfor %}
</div>
{% endif %}
{% endfor %}
</div>
Он отображает элементы в три колонки, но колонки не выровнены, и при проверке HTML, класс 'row' одинаков для всех строк (давая ему id и проверяя с помощью CSS), так что я думаю, что есть что-то, что я делаю неправильно.
Я хотел бы получить вывод типа:
Категория1 - Категория2 - Категория3
Категория4 - Категория5 - Категория6
С объектами 'page' каждой категории под ними.
Данные отображаются нормально, представление простое (просто получение всех объектов категории). Мне просто нужно, чтобы данные рендерились в разных строках по 3 столбца. Я пробовал метод divisibleby, но, похоже, я все еще что-то упускаю. Какой подход был бы лучшим?
<section class="bg-light appear-animation h-100" data-appear-animation="fadeIn">
<div class='container'>
<div class="row">
{% for category in categories %}
{% if forloop.counter0|divisibleby:"3" %}
</div>
<div class="row">
<div class="col-6 col-md-4">
<h3>{{category.category_name}}</h3>
{% for page in category.page_set.all %}
<p>{{page.page_title}}</p>
{% endfor %}
</div>
{% else %}
<div class="col-6 col-md-4">
<h3>{{category.category_name}}</h3>
{% for page in category.page_set.all %}
<p>{{page.page_title}}</p>
{% endfor %}
</div>
{% endif %}
{% endfor %}
</div>
</section>
Вы должны использовать counter0 в if вокруг тега open row div. Затем вы должны использовать счетчик в теге if вокруг div закрытой строки. Потому что counter0 начинается с 0, а counter начинается с 1. Таким образом, новый тег row div открывается на 0, 3, 9, 12. А созданный тег row div закрывается на 2, 5, 8, 11.
<div class='container'>
{% for category in categories %}
{% if not forloop.counter0|divisibleby:"3" %}
<div class="row">
{% endif %}
<div class="col-6 col-md-4">
<h3>{{category.category_name}}</h3>
{% for page in category.page_set.all %}
<p>{{page.page_title}}</p>
{% endfor %}
</div>
{% if not forloop.counter|divisibleby:"3" %}
</div>
{% endif %}
{% endfor %}