Jinja2 dictsort过滤器无法按字典子元素name字段排序如何解决
问题原因
你调用dictsort的参数传递方式不符合Jinja2的过滤器语法要求:dictsort默认按字典的键排序,你直接传入'name'作为第一个参数,实际上对应dictsort的第一个reverse布尔参数,根本没有指定按照值的name字段排序,所以实际是按照字典的键1、2、3、4的顺序遍历,才会出现你看到的错误排序结果。
正确实现方式
方法1:使用dictsort显式指定排序规则
需要同时指定按值排序,以及按值的name属性排序:
{%- for thing, property in things|dictsort(by='value', attribute='name') %} foo "{{ property.name }}" bar {%- endfor %}
方法2:提取字典值后用sort排序(更简洁)
如果不需要用到字典的键,直接提取所有值后按name字段排序即可:
{%- for property in things.values()|sort(attribute='name') %} foo "{{ property.name }}" bar {%- endfor %}
输出结果
两种写法都会得到按name升序排序的正确结果:
foo afoo bar foo bfoo bar foo cfoo bar foo zfoo bar
内容的提问来源于stack exchange,提问作者Preston
相关产品推荐
相关产品推荐

