我有一个词典:
>>> some_dict
{1: ['String1', 'String2', 'String3','String4' ],
2: ['String1_2', 'String2_2', 'String3_2', 'String4_2' ],}
在我的模板中,我想迭代这个dict并在html中显示值。所以我从视图中发送了这个词:
return render_to_response('tournament.html',
{.....
'some_dict' : some_dict,
'some_dict_range' : range(4),
.....
})
在tournament.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 ...... 为什么这不起作用?如果我的设计错了,它应该是什么样的?我的意思是 - 在html-template中迭代这个dict并显示值的正确方法是什么?
答案 0 :(得分:6)
不应:
{{some_dict.0.iter1}}<br>{% endfor %}
是:
{{some_dict.iter1.0}}<br>{% endfor %}
^^^^^^^
否则你试图访问不存在的some_dict [0] ...
为了避免在范围内传递(因为我假设你想按键顺序输出字典),你可以使用以下内容:
{% 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 %}