如何在Django模板中读取嵌套字典?

时间:2013-06-13 22:02:06

标签: python django django-templates

我试图在Django中访问模板中的以下数据结构。但对我来说太难了也弄明白了。

{ Day1 : { Room1 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))],

           Room2 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))],

           Room3 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))] },

 Day2 : {  Room1 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))],

           Room2 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))],

           Room3 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))] } }

可能是一个非常复杂的数据结构,但我很抱歉。我无法分手。我的选择有限。 我想在一个循环中访问每个元素。我怎么能这样做?

编辑:我想访问django模板中的元素。

4 个答案:

答案 0 :(得分:1)

它无法在单个循环中完成,但您可以通过一些嵌套来完成:

{% for day, rooms in mydict.items %}
  {% for room, dates_and_flags in rooms.items %}
    {% for date, time_and_flags in dates_and_flags %}
        {{ date }}:{{ time_and_flags }}
    {% endfor %}
  {% endfor %}
{% endfor %}

由于time_and_flags是元组,因此您可以使用time_and_flags.0和带time_and_flags.1的标记来访问时间。

答案 1 :(得分:1)

我能够通过一个循环来完成它 - 尽管我可能误解了之前的答案或最初的问题。无论如何,这可能对任何希望在Django中使用嵌套字典的人有所帮助

结合

  • .items()方法循环Django中的字典
  • 属性查找的.value语法

你的示例字典不是一本字典,所以另一个例子是

grades_dict = {'Math': {'grade': 78, 'grade_date': '2016-05-15'},
'Reading': {'grade': 83, 'grade_date': '2016-08-16'},
'Science': {'grade': 98, 'grade_date': '2016-08-16'},
'Social Studies': {'grade': 62, 'grade_date': '2016-05-15'}}

在django模板html中

{% for key, value in grades_dict.items %}
    <p>Grade for {{key}}: {{value.grade}}. </p>
    <p>Last entered on {{value.most_recent_grade_date}}</p>
{% endfor %}

结果

Grade for Social Studies: 62.

Last entered on 2016-05-15

Grade for Science: 98.

Last entered on 2016-08-16

Grade for Reading: 83.

Last entered on 2016-08-16

Grade for Math: 78.

Last entered on 2016-05-15

答案 2 :(得分:0)

这是一个生成器函数,它将返回循环中的每一行:

def next_row(data):
    for day,rooms in data.iteritems():
        for room,times in rooms.iteritems():
            for time in times:
                yield (day, room, time)

像这样使用:

for row in next_row(data):
    # do something with row

答案 3 :(得分:0)

你的问题并没有说明你想用你的嵌套词典做什么,但这是一个疯狂的猜测:

for day,rooms in days.iteritems():
    print "Rooms for day {}:".format(day)
    for room, times in rooms.iteritems():
        print "  . Room {}".format(room)
        for t in times:
            print "Date : {} | Total time : {} | Flag : {}".format(t[0], t[1][0], t[1][1])