2012-07-29 148 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