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>