2011-03-09 65 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