2015-08-31 154 views
1

我已閱讀關於循環變量的所有模板標籤帖子。顯然Django不支持循環變量的關鍵,我不知道如何使用自定義模板標記。Django模板標籤循環變量字典變量

我想顯示這樣的東西,但我怎麼能達到這與{%爲我在mData%}循環?

{{ mData.0.name }} 
{{ mData.1.name }} 
{{ mData.2.name }} 

{{ mData.0.age }} 
{{ mData.1.age }} 
{{ mData.2.age }} 

mData是詞典的列表。

MDATA = { 「名」: 「亞歷克斯」, 「年齡」: 「12」},{ 「名」: 「艾米」, 「年齡」: 「14」} ...

+1

關鍵是什麼?在這案件?因爲它看起來像'mData'是一個字典列表。 – dhke

+0

是的,這是一個字典清單...任何想法我怎麼能通過這個循環?我嘗試了{%for循環在mData.forloop.counter.name%}但它不起作用... – Arbitel

+0

在這種情況下,重新排序視圖中的數據結構,以便傳遞給模板的字典是'{ 'age':[age0,age1,...],'name':[name0,name1,...]}'等等。否則,您正在將數據準備代碼放入您的模板中。 – dhke

回答

2

考慮到你的數據在一個列表的字典,如:

my_data = [{"name" : "abc" , "age":20,...}, {} , {}...] 

您可以訪問模板中每個字典的所有屬性t他道:

{% for dict in my_data %} 
<!-- Here dict would be each of the dictionary in my_data --> 
<!-- You can access elements of dict using dot syntax, dict.property --> 
    {{ dict.name }}, {{ dict.age }}, ... {{ dict.property }} 
{% endfor %} 

參考鏈接:Django templating language

如果你想構建你的元素的順序,你specifed,你可以做這樣的事情:

Name List: 
{% for dict in my_data %} 
my_data.name 
{% endfor %} 

Age List: 
{% for dict in my_data %} 
my_data.age 
{% endfor %} 

... 
Prpoerty List: 
{% for dict in my_data %} 
my_data.property 
{% endfor %} 
+0

謝謝!這實際上按預期工作!簡直不敢相信這個解決方案!我正在玩自定義模板標籤和閱讀關於忍者等等即將放棄! – Arbitel

+1

只需通過django文檔中的模板語言章節,它會很好地編寫並解釋大量示例。一旦你通過它們,你會得到它的一個竅門。 http://www.djangobook.com/zh/2.0/chapter04.html – aliasav

+0

謝謝!我實際上正在閱讀它,但還不能完全弄清楚它,並與我在其上閱讀的模板標籤混淆。謝謝您的詳細解答!最後一個問題,如果我想循環遍歷所有的屬性呢?我可以用列表,屬性= ['名稱','年齡',...]來做到這一點嗎? {%for i in properties%} my_data.properties {%endfor%} – Arbitel

0
{% for k, v in mData.items %} 
    {{ k }} {{ v }} 

順便說一下,PEP8建議我們將該變量命名爲lower + _,但不是像javascript或其他語言的駝峯。

+0

嗯,這將無法正常工作,因爲我需要訪問字典列表... mData.0.items而不是mData。項目 – Arbitel

1

Django模板標籤有意地非常輕便,因此您不要將太多代碼放入模板本身。如果你需要做一些像數據庫中其他條目一樣複雜的事情,你應該在views.py而不是模板中設置它。

對於您所描述的情況下,所有你需要做的是循環遍歷對象的列表:

{% for data in datas %} 
    {{ data.name }} 
{% endfor %} 
{% for data in datas %} 
    {{ data.age }} 
{% endfor %} 
+0

這是行不通的......我需要訪問字典列表。例如。 mData.0.name .....我需要循環0到1000,然後名稱,年齡,性別......等任何想法? – Arbitel

+1

通過views.py你可以設置過濾器。 mData.objects.all()[:1000]應該獲取數據庫中的前1000條目。 – TheGRS

1

這解決了這個問題對我來說

{% for d in mData %} 
{{ d.name }} {{ d.age }} 
{% endfor %} 
+0

謝謝!這實際上按預期工作!簡直不敢相信這個解決方案!我正在玩自定義模板標籤和閱讀關於忍者等等即將放棄! – Arbitel

+1

如果這項工作,你可以標記答案爲答案,並請upvote – a134man