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 模板中使用它们的对应键来迭代[重复]