Django:模板并迭代dict

Rus*_*sty 2 html python django django-templates django-views

我有一个词典:

 >>> some_dict
{1: ['String1', 'String2', 'String3','String4' ],
 2: ['String1_2', 'String2_2', 'String3_2', 'String4_2' ],}
Run Code Online (Sandbox Code Playgroud)

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

return render_to_response('tournament.html', 
        {.....
        'some_dict' : some_dict,
        'some_dict_range' : range(4),
             .....
        })
Run Code Online (Sandbox Code Playgroud)

在tournament.html中我试图迭代some_dict.我想获得看起来像的输出:

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

 {% for iter1 in some_dict_range%}         
{{some_dict.0.iter1}}<br>{% endfor %}
Run Code Online (Sandbox Code Playgroud)

结果,我一无所获.但是当我试图在没有迭代器的情况下得到相同的结果:some_dict.0.0,some_dict.0.1等我得到我需要的东西('String1','String2','String3','String4').当我试图查看"iter1"的值时,我得到正确的数字:

 {% for iter1 in some_dict_range%}         
{{iter1}}<br>  {% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*nts 6

不应该:

{{some_dict.0.iter1}}<br>{% endfor %}
Run Code Online (Sandbox Code Playgroud)

是:

{{some_dict.iter1.0}}<br>{% endfor %}
            ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

否则你试图访问不存在的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 %}
Run Code Online (Sandbox Code Playgroud)