在django模板中显示dict索引或键名

时间:2018-05-23 10:50:44

标签: django django-templates

如何在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 %}

1 个答案:

答案 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,这将生成一个可翻译的字典的