能否在Jinja2中按对象子属性排序?嵌套字典列表排序咨询
当然可行!
Jinja2的sort过滤器完全支持针对这种嵌套字典列表的排序需求,你只需要通过attribute参数指定嵌套路径即可,非常直观。
具体写法示例
假设你的列表是l = [{ 'a': [ { 'b': 4} ] }, { 'a': [ { 'b': 3} ] }],在Jinja2模板里可以这么写:
{% for item in l | sort(attribute='a.0.b') %} {{ item }} {% endfor %}
原理说明
这里的a.0.b对应你要访问的嵌套路径:
a:访问字典中的'a'键0:访问列表a的第一个元素(对应Python里的[0])b:访问该子字典中的'b'键
Jinja2会自动解析这个点分隔的路径,提取每个元素的a[0]['b']值作为排序依据,最终会按从小到大的顺序输出:
{'a': [{'b': 3}]} {'a': [{'b': 4}]}
如果需要倒序排序,只需要加上reverse=True参数:
{% for item in l | sort(attribute='a.0.b', reverse=True) %} {{ item }} {% endfor %}
内容的提问来源于stack exchange,提问作者heapOverflow
相关产品推荐
相关产品推荐

