Django:模板并迭代dict

时间:2012-07-29 11:25:06

标签: python html django django-templates django-views

我有一个词典:

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

1 个答案:

答案 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 %}