Django的 – 如何做一个模板中的元组解开'循环'

在我的views.py中,我构build了一个两元组列表,其中元组中的第二个元素是另一个列表,如下所示:

[ 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得到这个错误:

捕捉exception,而渲染:zip参数#2必须支持迭代

当然,模板中有一些HTML标记,而不是打印语句。 Django模板语言不支持元组解包function吗? 或者我正在做这个错误的方式? 我试图做的是显示一个简单的对象层次结构 – 有几种产品types,每种产品都有几种产品(在models.py中,产品具有Product_type的外键,简单的一对多关系)。

很显然,我对Django来说是相当新的,所以任何input都将不胜感激。

如果你像{注意'('和')'可以交换'['和']',一个是元组,一个是列表的}

 [ (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 %} 

tuples / lists在for循环中解压的方式是基于列表迭代器返回的项目。 每次迭代只返回一个项目。 第一次循环,Product_Type_1,第二次你的产品列表…

另一种方法如下。

如果有一个元组列表说

 mylst = [(a, b, c), (x, y, z), (l, m, n)], 

那么可以按照以下方式在模板文件中解压该列表。 就我而言,我有一个包含URL,标题和文档摘要的元组列表。

 {\% for item in mylst \%} {{ item.0 }} {{ item.1}} {{ item.2 }} {\% endfor \%} 

你必须这样使用:

 {% for product_type, products in product_list.items %} print product_type {% for product in products %} print product {% endfor %} {% endfor %} 

不要忘记字典数据中的variables项目

只需发送模板的产品types列表,并执行如下操作:

 {% for product_type in product_type_list %} {{ product_type }} {% for product in product_type.products.all %} {{ product }} {% endfor %} {% endfor %} 

已经有一段时间了,所以我不记得语法到底是什么,让我知道,如果这是有效的。 检查文档 。

如果你的元组中有一个固定的数字,你可以使用索引。 我需要混合一个字典,值是元组,所以我这样做了:

在看法:

 my_dict = {'parrot': ('dead', 'stone'), 'lumberjack': ('sleep_all_night', 'work_all_day')} 

在模板中:

 <select> {% for key, tuple in my_dict.items %} <option value="{{ key }}" important-attr="{{ tuple.0 }}">{{ tuple.1 }}</option> {% endfor %} </select>