在我的views.py中,我正在构建一个包含两个元组的列表,其中元组中的第二个项目是另一个列表,如下所示:

[ Product_Type_1, [ product_1, product_2 ],
  Product_Type_2, [ product_3, product_4 ]]

在普通的旧Python中,我可以像这样迭代列表:
for product_type, products in list:
    print product_type
    for product in products:
        print product

我似乎无法在Django模板中执行相同的操作:
{% for product_type, products in product_list %}
    print product_type
    {% for product in products %}
        print product
    {% endfor %}
{% endfor %}

我从Django收到此错误:

渲染时捕获到异常:zip参数2必须支持迭代

当然,模板中有一些HTML标记,而不是print语句。 Django模板语言不支持元组拆包吗?还是我走错路了?我要做的只是显示一个简单的对象层次结构-有几种产品类型,每种产品都有几种产品(在models.py中,Product具有Product_type的外键,这是一个简单的一对多关系)。

显然,我是Django的新手,因此感谢您的投入。

最佳答案

最好将数据构造为{注意,可以分别将'('和')'交换为'['和']',一个用于元组,一个用于列表}

[ (Product_Type_1, ( product_1, product_2 )),
   (Product_Type_2, ( product_3, product_4 )) ]

并让模板执行以下操作:
{% for product_type, products in product_type_list %}
    {{ product_type }}
    {% for product in products %}
        {{ product }}
    {% endfor %}
{% endfor %}

元组/列表在for循环中解包的方式基于列表迭代器返回的项目。
每次迭代仅返回一个项目。第一次绕产品Product_Type_1循环,第二次绕产品列表...

关于python - Django-如何在模板 'for'循环中进行元组拆包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/271077/

10-11 22:32
查看更多