如何遍历 django 模板中的嵌套字典

     2023-02-24     95

关键词:

【中文标题】如何遍历 django 模板中的嵌套字典【英文标题】:How to iterate over nested dictionaries in django templates 【发布时间】:2011-10-11 19:52:43 【问题描述】:

我不确定迭代嵌套字典以打印每个日期每个水果的总值和良好值的矩阵的最有效方法。以下面的两个列表和字典为例:

fruits = ['apples','oranges','bananas']
harvest_dates = ['2011-07-23','2011-07-22','2011-07-21']

harvest_data = 
  'apples': 
    '2011-07-23': 
      'total': 100,
      'good': 80,
     '2011-07-22': 
       'total': 97,
       'good': 92,
     '2011-07-21': 
       'total': 90,
       'good': 85
  ,
  'oranges': 
    '2011-07-23': 
      'total': 86,
      'good': 82,
    '2011-07-22': 
      'total': 90, 
      'good': 75,
    '2011-07-21': 
      'total': 92,
      'good': 92
  ,
  'bananas': 
    '2011-07-23': 
      'total': 10,
      'good': 9,
    '2011-07-22': 
      'total': 12, 
      'good': 11,
    '2011-07-21': 
      'total': 9,
      'good': 9
  

我可以在 python 中轻松做到这一点:

for fruit in fruits:
  for day in harvest_dates:
    print "harvest: %s" % harvest_data[fruit][day]['total']
    print "good crop: %s" % harvest_data[fruit][day]['good']

但我不知道如何在 django 模板中访问这些数据。我一直在尝试诸如:

% for fruit in fruits %
  ...
  % for day in harvest_dates %
    ...
     harvest_data.fruit.day.total 
     harvest_data.fruit.day.good 
    ...
  % endfor %
% endfor %

但它根本不起作用。

% for fruit in fruits %
   harvest_data.fruit   <--- this does not exist
   harvest_data[fruit]   <--- this does not work
% endfor %

我是一个完全的业余爱好者,我可能会搞错这一切,但我已经用谷歌搜索了很多,我不清楚获取我想要的数据的最佳方法是什么。

【问题讨论】:

【参考方案1】:

由于您熟悉 python,因此从逻辑上讲,您希望在 Django 模板中遍历字典:

for key,value in harvest_data.items():
...     print key
...     for key2,value2 in value.items():
...         print key2
...         for key3,value3 in value2.items():
...             print "%s:%s"%(key3,value3)

在您的模板中,翻译如下:

% for key, value in harvest_data.items %
     key  <br>
    % for key2,value2 in value.items %
         key2  <br>
        % for key3, value3 in value2.items %
             key3 : value3  <br>
        % endfor %
    % endfor %
% endfor %

在描述for 模板标签的工作原理时,Django 文档实际上简要地包含了一个如何遍历字典的示例:

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

【讨论】:

我不确定这是否有意义,但我想我发现的问题是我需要根据我所在的位置从嵌套字典之一中获取特定值循环通过水果和日期。如果我只是像你提到的那样循环遍历收获数据,是否可以保证我所有的日期都会排队? 我认为循环遍历字典比尝试从模板中的单独字典中获取特定值更好。 python 中的标准字典没有顺序,但如果您想保留顺序,可以使用排序字典(有关如何执行此操作的更多信息,请参阅此 SO 答案:***.com/questions/5792190/…)。 根据@Hassek 下面的评论更新了我的答案,为每次迭代包含不同的关键字。【参考方案2】:

正如滚石所说,这是在模板中迭代字典的方式,我只会在每次迭代中更改不同关键字的键、值关键字,如下所示:

% for key, value in harvest_data.items %
     key  <br>
    % for key2,value2 in value.items %
         key2  <br>
        % for key3, value3 in value2.items %
             key3 : value3  <br>
        % endfor %
    % endfor %
% endfor %

只是为了清楚起见:)

如果你想排列你的值,我建议你使用另一个数据结构,你可以按日期排序,例如这样的:

 'oranges' : [(date1, value1), (date2,value2)] ...

尽量在你的模板中做尽可能少的操作,所以如果你不需要,不要做排序或嵌套 if

【讨论】:

感谢@Hassek,更新了我的答案以包含不同的键、值关键字。顺便说一句,您的更新中有一个小错字, key3 : value 应该是 key3 : value3 【参考方案3】:

确实是老问题,但我会添加我的 1.5c。

这是重组标签 (https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#regroup) 和一些数据重构的好用例:

    将您的数据作为一个简单的数据点列表:

    harvest_data = [
        'fruits': 'apples', 'date': '2011-07-23', 'total': 100, 'good': 80,
        # ...
    ]
    

    在您的模板中,按所选维度分组:

    % regroup harvest_data by fruits as data_by_fruits %
    % for data in data_by_fruits %
        <h1> data.grouper </h1>   # 'apples'
        % regroup data.list by date as data_by_fruits_date %
        % for data_1 in data_by_fruits_date %
            <h2> data_1.grouper </h2>    # '2011-07-23'
            % for datapoint in data_1.list %
                total:  datapoint.total  <br/>
                good:  datapoint.good  <br/>
            % endfor %
        % endfor %
    % endfor %
    

【讨论】:

循环遍历 Django 模板中的嵌套字典

】循环遍历Django模板中的嵌套字典【英文标题】:LoopingthroughnesteddictionaryinDjangotemplate【发布时间】:2020-08-0300:12:49【问题描述】:我的Django模板的上下文字典类似于以下内容:\'key1\':\'1\',\'key2\':\'2\',\'key3\':\'3\',\'key4\':\'key5\':\'key... 查看详情

如何遍历 Django 模板中的字典?

】如何遍历Django模板中的字典?【英文标题】:HowdoIiteratethroughadictionaryinDjangoTemplates?【发布时间】:2019-07-1416:43:36【问题描述】:我正在尝试遍历我的django模板中的字典并将值保存到window.obj,但它不起作用。views.py:defmyView(req)... 查看详情

Django模板访问嵌套数据

...:23:40【问题描述】:这看起来很傻,但我不明白Django模板如何访问上下文中的嵌套数据。我可以访问嵌套在上下文数据结构中的字典的值。符号——aDictionary.i_am_a_key工作正常。但是如果我尝试遍历一个键列表并从同一个字典中... 查看详情

显示 % forloop% 的键和值的 Django 模板:如何遍历模板中的字典?

】显示%forloop%的键和值的Django模板:如何遍历模板中的字典?【英文标题】:Djangotemplatedisplayingkeyandvaluesforthe%forloop%:Howtoiterateoveradictionaryinatemplate?显示%forloop%的键和值的Django模板:如何遍历模板中的字典?【发布时间】:2014-02-... 查看详情

嵌套字典中的 Django 模板

】嵌套字典中的Django模板【英文标题】:Djangotemplateinnesteddictionary【发布时间】:2014-03-0414:02:54【问题描述】:我正在使用Django模板,但遇到了嵌套字典的一个问题。字典:result_dict=\'type_0\':\'file_name\':\'abc\',\'count\':0,\'type_1\':\'fil... 查看详情

遍历 django 模板中的字典

】遍历django模板中的字典【英文标题】:iteratethroughadictionaryindjangotemplate【发布时间】:2018-05-2409:06:45【问题描述】:\'provideafullrefundofanymoneypaid\':[\'the\',\'dith\',\'with\',\'ande\',\'cor\'],\'copyrightlawsoftheplacewhereyouar\':[\'e\ 查看详情

Django模板:如何通过每个字典的嵌套属性重新组合字典列表?

】Django模板:如何通过每个字典的嵌套属性重新组合字典列表?【英文标题】:Djangotemplate:HowcanIregroupalistofdictionariesbyanestedpropertyofeachdictionary?【发布时间】:2014-02-1602:01:24【问题描述】:我正在为一个工作列表网站编写一个模... 查看详情

如何在 Django 模板中多次遍历同一个字典?

】如何在Django模板中多次遍历同一个字典?【英文标题】:HowcanIIteratethroughthesamedictionarymultipletimesinaDjangotemplate?【发布时间】:2014-03-2716:53:55【问题描述】:我有一本名为categories的字典。我只想在Django模板中遍历这本字典两次... 查看详情

django模板嵌套字典,按键抓取值

...字典中有一个键与另一个字典(嵌套字典)关联,我知道如何迭代它(howtoiteratethroughdictionaryinadictionaryindjangotemplate?),但我需要通过键找到 查看详情

如何遍历 Django 字典中的外键?

】如何遍历Django字典中的外键?【英文标题】:HowcanIiterateoverforeignkeysinaDjangodictionary?【发布时间】:2015-04-1611:11:02【问题描述】:我对编程很陌生,并且有一个关于在我的Django视图文件中迭代外键的问题。models.pyclassSite(models.Mod... 查看详情

Django 模板 - 嵌套字典迭代

】Django模板-嵌套字典迭代【英文标题】:DjangoTemplate-NestedDictionaryIteration【发布时间】:2021-01-1622:45:39【问题描述】:我的模板根据购物车内容的嵌套字典从views.py接收。\'20\':\'userid\':1,\'product_id\':20,\'name\':\'VenusdeMilos\',\'quantity\':... 查看详情

嵌套循环中的 Django 模板计数器

】嵌套循环中的Django模板计数器【英文标题】:Djangotemplatecounterinnestedloops【发布时间】:2012-12-0123:52:27【问题描述】:您好,我有一个要传递给Django模板的两个字典的列表:base_parts=[\'importantitem\':43,\'lesseritem\':22,\'lesseritem\':3,\'l... 查看详情

Django:如何遍历 html 中的嵌套 Json 对象

】Django:如何遍历html中的嵌套Json对象【英文标题】:Django:howtoloopthroughnestedJsonobjectinhtml【发布时间】:2019-01-0703:24:57【问题描述】:我是json新手,我在djangoview.py中有一个名为jresult的嵌套json对象。我将此对象传递给html,我想... 查看详情

如何访问 Django 模板中的字典元素?

】如何访问Django模板中的字典元素?【英文标题】:HowtoaccessadictionaryelementinaDjangotemplate?【发布时间】:2010-11-1912:44:16【问题描述】:我想打印出每个选项获得的票数。我在模板中有这段代码:%forchoiceinchoices%choice.choice-votes[choice... 查看详情

如何访问 Django 模板中的字典元素?

】如何访问Django模板中的字典元素?【英文标题】:HowtoaccessadictionaryelementinaDjangotemplate?【发布时间】:2017-03-0900:15:24【问题描述】:我想打印出每个选项获得的票数。我在模板中有这段代码:%forchoiceinchoices%choice.choice-votes[choice... 查看详情

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

...ndjangotemplate【发布时间】:2018-11-0207:58:01【问题描述】:如何在Django模板中遍历并显示字典“索引名”或“键名”?以下是上下文中的字典。基本上这是我的字典all_options[category][sub_category][name]的结构。“类别、子类别和名称”... 查看详情

如何遍历 Jinja 模板中的字典列表?

】如何遍历Jinja模板中的字典列表?【英文标题】:HowtoiteratethroughalistofdictionariesinJinjatemplate?【发布时间】:2014-10-1122:44:53【问题描述】:我试过了:list1=["username":"abhi","pass":2087]returnrender_template("file_output.html",list1=list1)在模板中... 查看详情

如何访问 Django 模板列表中的字典?

】如何访问Django模板列表中的字典?【英文标题】:HowtoaccessadictionaryinalistinDjangoTemplate?【发布时间】:2015-08-1804:26:32【问题描述】:在我的views.py中我有:credits_total=Course.objects.filter(dept=dept_code1,b_tech=1,type=1).values(\'sem\').annotate(su... 查看详情