Django: Вложенный цикл в шаблоне
category = ['cat1','cat2','cat3']
inventory = CurrentInventory.objects.all()
for cats in categories
inventorybycat = inventory.filter(category =cats)
setofinventories.append(inventorybycat)
context = {
'setofinventories':setofinventories
'category':category
}
В файле views.py выше этот цикл создает список объектов для каждой категории. В шаблоне ниже этот цикл печатает отфильтрованный список объектов для каждого элемента в списке категорий.
{% for inventory in setofinventories%}
{% for item in inventory %}
{{ item.category }}
{{ item.productName }}
{% endfor %}
{% endfor %}
Единственное, чего мне не хватает - я не знаю, как ссылаться на категорию в шаблоне. Я передаю весь список в контексте, но {{category{{forloop.counter}}}} не является корректным утверждением.
Я хотел бы либо использовать zip(category,setofinventories) для передачи этих двух элементов вместе, либо создать модель категории, фильтровать по этой модели, а затем я могу ссылаться на эту модель по элементам?
Если я застегну эти элементы dictofstuff = [zip(setofinventories,categories)]
.
Как мне сослаться на категорию в шаблоне?
{% for inventory in setofinventories%}
{{categories{{[forloop.counter]}}}}#This line does not work
{% for item in inventory %}
{{ item.category }}
{{ item.productName }}
{% endfor %}
{% endfor %}
Если я правильно вас понял, вы хотите вывести категорию только один раз. В вашем случае:
{% for inventory in setofinventories%}
{% ifchanged inventory.category %}
{{ inventory.category }}
{% endifchanged %}
{% for item in inventory %}
{{ item.quantity }}
{{ item.productName }}
{% endfor %}
{% endfor %}
я использую ifchanged
, подробнее здесь:
https://docs.djangoproject.com/en/4.1/ref/templates/builtins/#ifchanged
в просмотрах я зазиповал это в *listofstuff. Простите за номенклатуру. dictofstuff = [zip(categories,setofinventories)]
в шаблоне. Опять же, простите за плохую номенклатуру. Я должен вернуться и переименовать их, но это работает.
{% for category in dictofstuff %}
{% for item in category %}
{{item.0}}
{% for stuff in item %}
{% for thing in stuff %}
{{thing.productId}}{{thing.productName}}
{% endfor %}
{% endfor %}
{% endfor %}
{% endfor %}