2011-03-09 45 views
30

我想學習Django模板,但這並不容易。
我有一個views.py包含一個字典將與模板呈現。字典由鍵值對組成,其中鍵是唯一的名稱,值是與這些名稱相關的一些值。我呈現以下方式解釋:如何渲染django模板中的有序字典?

return render_to_response('results.html', {'data': results_dict}) 

現在我的問題是,在我的模板,我需要與親人值顯示字母(或ASCIIbetical)的名稱順序。
其實在我的模板,我有:

<table> 
{% for key, value in data.items %} 
    <tr> 
     <td> {{ key }}: </td> <td> {{ value }} </td> 
    </tr> 
</table> 

我怎樣才能呈現排序方式的數據? 非常感謝。

回答

53

在views.py(Python2):

return render_to_response('results.html', 
    {'data': sorted(results_dict.iteritems())}) 

或者在views.py(Python3):

return render_to_response('results.html', 
    {'data': sorted(results_dict.items())}) 

在模板文件:

{% for key, value in data %} 
    <tr> 
     <td> {{ key }}: </td> <td> {{ value }} </td> 
    </tr> 
{% endfor %} 
6

刷新老問題,但這是我花了一些時間作爲編程noobie。 這種擴充富田雄二的回答。

如何排序的字典,看起來像這樣:

{model_A_object: {key: value, ...},...} 

通過model_A_object.field。

我用for循環填充它,並使用它來存儲一些聚合等等,我傳遞給模板的queryset的數據。

我已經成功地(從#Django幫助,Shubuntu)通過做到這一點:

result = sorted(dictionary.iteritems(), key= lambda (k, v) : (k.field, v)) 

模板然後:

{% for model_A_object, data in result %} 
     {% for key, value in data.items %} 
      ... 
     {% endfor %} 
    {% endfor %} 

清潔容易,但不是簡單的數字爲初學者。請注意,第一個for循環有結果而不是result.items因爲它不再是字典,而是元組列表。

希望它可以幫助別人。

12

另一種解決方案對我來說效果很好,我認爲它更簡單。它採用OrderedDict()more info

在你views.py文件中加入:

from collections import OrderedDict 
def main(request): 
    ord_dict = OrderedDict() 
    ord_dict['2015-06-20'] = {} 
    ord_dict['2015-06-20']['a'] = '1' 
    ord_dict['2015-06-20']['b'] = '2' 
    ord_dict['2015-06-21'] = {} 
    ord_dict['2015-06-21']['a'] = '10' 
    ord_dict['2015-06-21']['b'] = '20' 
    return render(request, 'main.html', {'context': ord_dict}) 
在你的模板

然後,你可以這樣做:

<table> 
{% for key, value in context.items %} 
    <tr> 
     <td>{{ key }}</td> 
     <td>{{ value.a }}</td> 
     <td>{{ value.b }} </td> 
    </tr> 
{% endfor %} 
</table> 

這將返回字典的鍵在同一下令他們被放進去了。

2015-06-20 1 2 
2015-06-21 10 20 
+1

謝謝,它的工作很好,我:) – pyramidface 2015-07-16 00:26:29

+0

作品。很高興在'OrderedDict()'內調用 – Tunn 2018-01-27 02:47:28