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 %}
Вернуться на верх