Как правильно вывести данные в таблицу в шаблоне django по 5 значений на строку?

извиняюсь за, возможно, глупый вопрос, просто являюсь новичком, но решить проблему не могу.

В общем. Есть таблица в бд, продукты. Есть шаблон в который все это выводится, в виде таблицы. Так вот проблема в том, что все продукты выводятся только в 1 строку. А хотелось бы по 5 продуктов в одной строке, затем переход на следующую строку, снова 5 продуктов, переход и тд. Таблицу упростил чтоб проще читалось.

{% block content %}
    {% sidebar %}
    <div class="body_content">
        <table class="table table-borderless">
            <thead>
            <tr>
                <th scope="col"></th>
                <th scope="col"></th>
                <th scope="col"></th>
                <th scope="col"></th>
                <th scope="col"></th>
            </tr>
            </thead>
            <tbody>
                <tr>
                    <th scope="row"></th>
                    {% for product in products %}
                        <td>
                           {{product.name}}
                        </td>
                    {% endfor %}
                </tr>
            </tbody>
        </table>
    </div>
{% endblock %}

1 способ, более легкий. Обработать список продуктов на уровне view.

Создать утильную функцию, которая будет делить список на блоки. Пример реализации:

def split_list_into_blocks(lst, block_size):
    return [lst[i:i+block_size] for i in range(0, len(lst), block_size)]

После получения во view продуктов из базы разделить продукты на блоки по 5 штук с помощью утильной функции. Получится список, в котором будут дочерние списки по 5 элементов.

В шаблоне перебираешь - сначала блок, затем элементы блока.

   <tbody>
    {% for block in product_block %}
        <tr>
            {% for product in block %}
                <td>
                   {{ product.name }}
                </td>
            {% endfor %}
        </tr>
      {% endfor %}
  </tbody>

Минусы данного способа: если элементов меньше, чем размер блока, то в таблице у тебя будет недостаточное количество ячеек. По описанию вопроса тяжело понять, насколько для тебя это критично. А также если ты используешь список продуктов ещё в другом месте на странице, то в контексте придется дублироваться, либо везде использовать этот список подсписков. Это плохо.

2 способ, более правильный. То же самое, что и в 1 способе, но не на уровне view, а на уровне шаблона.

Можно создать собственный тег для шаблона. По сути, тег это такая же функция. Логика тега будет такой же, как и утильного метода split_list_into_blocks(). Сделать тег универсальным и каждый раз класть в него объекты, которые нужно пагинировать

Минусы данного способа: ещё никуда не девается проблема с числом продуктов меньше, чем размер блока. А также данный способ сложнее и дольше для новичка

Вернуться на верх