Как вывести экземпляры моделей django в определенном порядке с помощью шаблонов django?

У меня есть div в моем html с их id каждый вот так:

<div class="row">
  <div class="myclass" id="id1"></div>
  <div class="myclass" id="id2"></div>
  <div class="myclass" id="id3"></div>
  <div class="myclass" id="id4"></div>
</div>

Теперь как я могу отобразить экземпляры модели в порядке, указанном ниже?

первый экземпляр в первом div ряда

второй экземпляр во втором div ряда

третий экземпляр в третьем div ряда

четвертый экземпляр в четвертом div ряда

и пятый экземпляр в первом div ряда, так один и так далее.

Любая помощь будет признательна, даже если это будет с использованием javascript, надеюсь, там будет намного проще.

В представлении вы можете "подготовить" данные, используя:

def my_view(request):
    d = 4  # items per row
    items = list(MyModel.objects.all())
    items = [items[i:i+d] for i in range(0, len(items), d)]
    return render(request, 'name-of-template.html', {'items': items})

Тогда мы можем перечислить все подсписки, и для каждого подсписка перечислить все элементы в этом подсписке, так:

{% for sublist in items %}
    <div class="row">
    {% for item in sublist %}
        <div class="myclass">{{ item }}</div>
    {% endfor %}
    </div>
{% endfor %}

Здесь queryset - это model.objects.all(), который вы передаете механизму рендеринга шаблона.

в вашем html-файле:

<!-- some code -->

<div class="row">
    {% for div_id in range(4) %}
    <div class="myclass" id="id{{ div_id + 1 }}">
        {% for instance in chosenInstances(instances, div_id + 1) %}
        {{ instance }}
        {% endfor %}
    </div>
    {% endfor %}
</div>

<!-- some code -->

и в python:

def chosenInstances(instances, div_id):
    return [instance for index, instance in enumerate(instances) if (index % 4 + 1) == div_id]

render_template("htmlfile.html", chosenInstances=chosenInstances)
Вернуться на верх