如何在Django模板中渲染有序字典?
我正在学习Django模板,但这并不简单。
我有一个views.py文件,里面有一个字典要用模板来显示。这个字典是由键值对组成的,键是唯一的名字,值是和这些名字相关的一些值。我用以下方式来渲染这个字典:
return render_to_response('results.html', {'data': results_dict})
现在我遇到的问题是,我需要在模板中按字母顺序(或者说ASCII顺序)显示这些名字和对应的值。
实际上在我的模板中,我有:
<table>
{% for key, value in data.items %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
</table>
我该如何以排序的方式渲染这些数据呢?非常感谢。
4 个回答
16
还有一个对我来说非常有效的解决方案,我觉得这个方法更简单。它使用了 OrderedDict()
,更多信息
在你的 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
29
虽然在视图中修改代码是更好的选择,但你也可以使用 dictsort 模板标签:
https://docs.djangoproject.com/en/stable/ref/templates/builtins/#std:templatefilter-dictsort
<table>
{% for key, value in data.items|dictsort:"0.lower" %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
</table>
60
在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.items() %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
{% endfor %}