Как вывести экземпляры моделей 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)