如何在django模板中呈现有序字典?

gre*_*n69 39 python django django-templates

我正在尝试学习django模板,但这并不容易.
我有一些views.py包含要用模板渲染的字典.字典由键值对组成,其中键是唯一名称,值是与这些名称关联的一些值.我用以下方式渲染字典:

return render_to_response('results.html', {'data': results_dict})
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,在我的模板中,我需要使用亲戚值以字母(或ASCIIbetical)顺序显示名称.
实际上在我的模板中我有:

<table>
{% for key, value in data.items %}
    <tr>
        <td> {{ key }}: </td> <td> {{ value }} </td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

如何以排序方式呈现数据?非常感谢.

Yuj*_*ita 60

在views.py(Python2)中:

return render_to_response('results.html',
    {'data': sorted(results_dict.iteritems())})
Run Code Online (Sandbox Code Playgroud)

或者在views.py(Python3)中:

return render_to_response('results.html',
    {'data': sorted(results_dict.items())})
Run Code Online (Sandbox Code Playgroud)

在模板文件中:

{% for key, value in data.items() %}
    <tr>
        <td> {{ key }}: </td> <td> {{ value }} </td>
    </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)


小智 25

虽然更改视图中的代码是可取的,但您也可以使用dictsort模板标记:

https://docs.djangoproject.com/es/1.9/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>
Run Code Online (Sandbox Code Playgroud)

  • 很好,因为你实际上在模板中解决它 (3认同)

tok*_*fsj 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})
Run Code Online (Sandbox Code Playgroud)

然后在您的模板中,您可以:

<table>
{% for key, value in context.items %}
    <tr>
        <td>{{ key }}</td>
        <td>{{ value.a }}</td>
        <td>{{ value.b }} </td>
    </tr>
{% endfor %}
</table>
Run Code Online (Sandbox Code Playgroud)

这将返回字典的键,其顺序与放入它们相同.

2015-06-20  1   2
2015-06-21  10  20
Run Code Online (Sandbox Code Playgroud)


Mar*_*rek 8

令人耳目一新的问题,但这是我花了一些时间作为编程noobie.它扩展了Yuji Tomita的答案.

如何对如下字典进行排序:

{model_A_object: {key: value, ...},...}
Run Code Online (Sandbox Code Playgroud)

by model_A_object.field.

我用for循环填充它,并使用它来存储我传递给模板的查询集的一些聚合等数据.

我已经设法做到这一点(与#Django帮助的Shubuntu):

    result = sorted(dictionary.iteritems(), key= lambda (k, v) :  (k.field, v))
Run Code Online (Sandbox Code Playgroud)

然后在模板中:

    {% for model_A_object, data in result %}
        {% for key, value in data.items %}
            ...
        {% endfor %}
    {% endfor %}
Run Code Online (Sandbox Code Playgroud)

干净简单,但初学者并不那么简单.请注意,首先for循环结果不是result.items,因为它不再是字典,而是元组列表.

希望它可以帮助某人.