Python 如何在django模板中呈现有序字典?
我正在尝试学习django模板,但这并不容易。Python 如何在django模板中呈现有序字典?,python,django,django-templates,Python,Django,Django Templates,我正在尝试学习django模板,但这并不容易。 我有一个特定的views.py,其中包含一个要用模板呈现的字典。字典由键-值对组成,其中键是唯一的名称,值是与这些名称关联的一些值。我以以下方式呈现词典: return render_to_response('results.html', {'data': results_dict}) 现在我的问题是,在我的模板中,我需要按字母顺序(或字母顺序)显示名称和相关值。 实际上,在我的模板中,我有: <table> {% for key,
我有一个特定的views.py,其中包含一个要用模板呈现的字典。字典由键-值对组成,其中键是唯一的名称,值是与这些名称关联的一些值。我以以下方式呈现词典:
return render_to_response('results.html', {'data': results_dict})
现在我的问题是,在我的模板中,我需要按字母顺序(或字母顺序)显示名称和相关值。实际上,在我的模板中,我有:
<table>
{% for key, value in data.items %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
</table>
{%表示键,值位于data.items%}
{{key}}:{{value}
如何以排序方式呈现数据?
非常感谢。在views.py(Python2)中:
或者在views.py(Python3)中:
在模板文件中:
{% for key, value in data.items() %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
{% endfor %}
{%用于键,数据中的值。items()%}
{{key}}:{{value}
{%endfor%}
刷新旧问题,但这是我花了一些时间在编程上的琐事。
这有点扩展了Tomita Yuji的答案
如何对如下所示的词典进行排序:
{model_A_object: {key: value, ...},...}
按模型A_object.field
我用for循环填充它,并使用它来存储一些聚合,等等,我传递给模板的queryset的数据
我(借助#Django help的Shubuntu)通过以下方式做到了这一点:
然后在模板中:
{% for model_A_object, data in result %}
{% for key, value in data.items %}
...
{% endfor %}
{% endfor %}
简洁易懂,但对于初学者来说并不是那么简单。注意,第一个for循环有结果而不是结果。项,因为它不再是字典,而是元组列表
希望它能帮助别人。另一个对我来说非常有效的解决方案,我认为它更简单。它使用
orderedict()
在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>
尽管最好更改视图中的代码,但也可以使用dictsort模板标记:
{%表示键,数据中的值。项| dictsort:“0.lower”%}
{{key}}:{{value}
有效。如果能在orderedict()
callgreat-response中完成这一切,那就太好了。值得一提的是,我们也可以使用它来按相反的顺序排序。谢谢你的感谢-非常好用。我几乎发现了这一点,但由于最后一个示例,我在尝试dictsort:0时遇到了困难(即0上没有引号)。有人能在文档中解释这一点吗?{key为%,data.items()中的值为%}thisd在Django模板中不起作用
{% for model_A_object, data in result %}
{% for key, value in data.items %}
...
{% endfor %}
{% endfor %}
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
<table>
{% for key, value in data.items|dictsort:"0.lower" %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
</table>