Django:模板和迭代字典

Posted

技术标签:

【中文标题】Django:模板和迭代字典【英文标题】:Django: templates and iterate over dict 【发布时间】:2012-07-27 08:58:17 【问题描述】:

我有一个字典:

 >>> some_dict
1: ['String1', 'String2', 'String3','String4' ],
 2: ['String1_2', 'String2_2', 'String3_2', 'String4_2' ],

在我的模板中,我想遍历这个字典并在 html 中显示值。所以我从视图中发送了这个字典:

return render_to_response('tournament.html', 
        .....
        'some_dict' : some_dict,
        'some_dict_range' : range(4),
             .....
        )

在锦标赛.html 中,我尝试迭代 some_dict。我想获得如下所示的输出:

'String1', 'String2', 'String3','String4'

 % for iter1 in some_dict_range%         
some_dict.0.iter1<br>% endfor %

结果,我什么也没得到。 但是当我试图在没有迭代器的情况下获得相同的结果时: some_dict.0.0、some_dict.0.1 等我得到了我需要的东西('String1'、'String2'、'String3'、'String4')。 当我尝试查看“iter1”的值时,我得到了正确的数字:

 % for iter1 in some_dict_range%         
iter1<br>  % endfor %

0, 1, 2 ... 为什么这行不通?如果我在设计上错了,它应该是什么样子?我的意思是 - 迭代这个 dict 并在 html-template 中显示值的正确方法是什么?

【问题讨论】:

【参考方案1】:

不应该:

some_dict.0.iter1<br>% endfor %

是:

some_dict.iter1.0<br>% endfor %
            ^^^^^^^

否则,您正在尝试访问不存在的 some_dict[0]...

为避免传入范围(因为我假设您希望按键顺序输出 dict),您可以使用以下内容:

% for k, v in some_dict.items|sort %
    Position  k  has a first value of  v.0  and has:<br>
     v|join:"<br/>" 
    % for item in v %
         item 
    % endfor %
% endfor %

【讨论】:

我是对的 - some_dict.0.iter1。当我尝试迭代“some_dict.0.1”、“some_dict.0.2”等时 - 我得到了我的价值观 如果你使用 some_dict.0.X 访问,你的字典必须有“0”作为键,因为如果没有,你应该得到一个 KeyError 引发。你的例子正确吗? @JonClements 是对的,如果您不相信我们,请查看 this... 是的,这是我的错误——我有一个键'0',而不是'1'。感谢@JonClements,他的解决方案非常完美 我又错了——解决方案并不完美。如果我想遍历“ v.0 ”怎么办。我的意思是我想 v.x 其中 x - 是迭代器。当我尝试 % for x in z% v.x % endfor % - 我什么也没得到。 (例如,z 是一个范围(4)) 谢谢,这是我要搜索的

以上是关于Django:模板和迭代字典的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 模板中迭代字典的列表值

Django迭代列表中的字典并在模板中显示数据

字典值不能通过在 django 模板中使用它们的对应键来迭代[重复]

字典值无法通过在django模板中使用相应的键进行迭代[重复]

Flask 学习-89.模板中迭代字典.items()

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