2012-07-29 2 views
2

У меня есть Dict:Django: шаблоны и перебрать Словаре

>>> some_dict 
{1: ['String1', 'String2', 'String3','String4' ], 
2: ['String1_2', 'String2_2', 'String3_2', 'String4_2' ],} 

В моем шаблоне я хочу перебрать этого Dict и отображения значений в HTML. Поэтому я отправил этот dict из представления:

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 и display в html-шаблоне?

ответ

5

не должны:

{{some_dict.0.iter1}}<br>{% endfor %} 

Be:

{{some_dict.iter1.0}}<br>{% endfor %} 
      ^^^^^^^ 

Else вы пытаетесь получить доступ к 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 %} 
+0

Я был прав - some_dict.0.iter1. Когда я пытаюсь выполнить итерацию «some_dict.0.1», «some_dict.0.2» и т. Д. - я получаю свои значения – Rusty

+0

Если вы получаете доступ с помощью some_dict.0.X, словарь должен иметь «0» в качестве ключа, потому что если нет, вы должны получить KeyError поднял. Правильно ли ваш пример? @JonClements прав, взгляните на [это] (https://docs.djangoproject.com/en/dev/topics/templates/#variables), если вы не верите нам ... – marianobianchi

+0

Да, это мой ошибка - у меня есть ключ «0», а не «1». Thx to @JonClements, его решение отлично работает – Rusty

Смежные вопросы