如何在Django模板中遍历并显示dict“索引名称”或“键名”?以下是上下文中的词典。
基本上这是我的字典all_options[category][sub_category][name]
的结构。 “Category,sub_Category和name”是动态的。我想首先显示“类别”,然后向下钻取到“子类别”,然后再向下钻取。
模板不允许使用方括号来访问dict属性。
提前致谢!
上下文
'Condenser (WC)': {
'Water Box': {
'2MPA Condenser Water Box': {
'option': '2MPA Condenser Water Box',
'chillers': [{
'chiller': 'xxxxxxxxxxx',
'factory': '2' ,
'option': 'WB240.2U.F2HVKA>
}, {
'chiller': 'xxxxxxxxxxx',
'factory': '1' ,
'option': 'WB088.2H.F2AYFA>
}]
},
},
'Anodes': {
'Magnesium Anodes': {
'option': 'Magnesium Anodes',
'chillers': [{
'chiller': 'xxxxxxxxxxx',
'factory': '2' ,
'option': 'WB240.2U.F2HVKA>
}, {
'chiller': 'xxxxxxxxxxx',
'factory': '2' ,
'option': 'WB240.2U.F2HVKA>
}]
}
},
'Stainless Steel Tube Sheet': {
'304 SS Condenser Tube Sheets': {
'option': '304 SS Condenser Tube Sheets',
'chillers': [{
'chiller': 'xxxxxxxxxxx',
'factory': '2' ,
'option': 'WB240.2U.F2HVKA>
}]
},
}
},
模板
在模板中,我添加了注释,它是需要打印的字符串。
{% for category_name in all_options %}
{{ category_name }} #Condenser (WC)
{% for subcat in category_name %}
{{ subcat }} #Water Box
{% for item in subcat %}
{{ item }} #2MPA Condenser Marine Water Box
{% for chiller in item.chillers %}
{{ chiller.option }} #WB200.3K.F2HVKA
{% endfor%}
{% endfor%}
{% endfor%}
{% endfor %}
答案 0 :(得分:2)
在Python中,您可以通过调用字典上的 .items()
函数来迭代迭代,如果 2元组。在Django模板中,我们也可以这样做:
{% for category_name, category in all_options.items %}
{{ category_name }} #Condenser (WC)
{% for subcat_name, subcat in category.items %}
{{ subcat_name }} #Water Box
{% for item_name, item in subcat.items %}
{{ item_name }} #2MPA Condenser Marine Water Box
{% for chiller in item.chillers %}
{{ chiller.option }} #WB200.3K.F2HVKA
{% endfor%}
{% endfor%}
{% endfor%}
{% endfor %}
(或类似的东西)
所以这里category_name
是与词典项关联的键,category
是值(所以在这种情况下是字典以及*)。然后,您可以再次枚举该字典,依此类推。
请注意,在Python中,词典是 无序 :这意味着迭代可以以任何可能的顺序发生。如果你想要一个固定的订单,我建议你使用一个2元组的列表,在这种情况下,你当然不必调用.items
。此外,字典只能包含 hashable 键,每个键最多可以出现一次。这不是因为Django,它只是在Python中设计字典的方式。
如前所述,如果你想要一个有序的元素集合,那么" key"不必是可以播放和/或多次出现,我建议你使用2元组列表(类似于[(k1, v1), (k2, v2)]
和ki
键,vi
对应值)。
如果您仅对这些值感兴趣,您可以使用.values
,这将生成一个可翻译的字典的值。