2012-07-29 104 views
2

我有一个字典:Django的:模板和遍历字典

>>> 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), 
      ..... 
     }) 

在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模板中显示值的正确方法是什么?

回答

5

不应:

{{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 %} 
+0

我是对的 - some_dict.0.iter1。当我试图迭代“some_dict.0.1”,“some_dict.0.2”等 - 我得到我的价值 – Rusty 2012-07-29 11:40:06

+0

如果你访问some_dict.0.X,你的字典必须有“0”作为一个关键,因为如果不是,你应该得到一个KeyError引发。你的例子正确吗? @JonClements是正确的,看看[这个](https://docs.djangoproject.com/en/dev/topics/templates/#variables)如果你不相信我们... – marianobianchi 2012-07-29 13:24:21

+0

是的,这是我的错误 - 我有一个关键'0',而不是'1'。 Thx to @JonClements,他的解决方案非常完美 – Rusty 2012-07-29 14:15:51