Python 如何在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,

我正在尝试学习django模板,但这并不容易。
我有一个特定的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>