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

Posted

技术标签:

【中文标题】在 django 模板中显示字典索引或键名【英文标题】:Display dict index or key name in django template 【发布时间】:2018-11-02 07:58:01 【问题描述】:

如何在 Django 模板中遍历并显示字典“索引名”或“键名”?以下是上下文中的字典。

基本上这是我的字典all_options[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】:

在 Python 中,您可以通过调用字典上的 .items() 函数来迭代可迭代的 if 2-tuples。在 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 中的字典是如何设计的。

如前所述,如果您想要一个有序的元素集合,这样“键”不必是可散列的和/或多次出现,我建议您使用 2 元组列表(类似于[(k1, v1), (k2, v2)]ki 键,vi 对应的值)。

如果您对这些值感兴趣,您可以使用.values,它会在字典的上生成一个可迭代对象。

【讨论】:

哇!像魅力一样工作!!!!我已经在创建自定义模板标签。非常感谢!

以上是关于在 django 模板中显示字典索引或键名的主要内容,如果未能解决你的问题,请参考以下文章

错误 RC2104:未定义的关键字或键名:WS_EX_LAYOUTRTL

VS2013中的错误rc2104未定义关键字或键名MS

redis 基本命令

如何只计算字典中的单词,同时返回字典键名的计数

使用 Django 时如何在 MongoDB 中使用不同的键名?

使用键名过滤pyspark中的字典