可以应用排序过滤器 http://jinja.pocoo.org/docs/templates/#sort在 Jinja2 中,首先按一个属性对列表进行排序,然后再按另一个属性排序?这似乎是很自然的事情,但在我的测试中,前面的排序完全不稳定,所有排序都丢失了。
我已经通过在将列表传递给模板之前先在 python 中排序来解决这个问题,但我想知道是否可以在 Jinja2 中对“稳定”进行排序。
我应用过滤器的方式是这样的:
{{ item_list|sort(attribute='value')|sort(attribute='color') }}
我希望看到的是按以下顺序排序的列表color
,元素共享颜色,排序依据value
。相反,它看起来就像value
排序从未发生过。
例如,从此列表中:
2 red
3 blue
3 red
2 blue
1 blue
4 red
我想要这样的东西:
1 blue
2 blue
3 blue
2 red
3 red
4 red
我看了看groupby http://jinja.pocoo.org/docs/templates/#groupby过滤器,但该实现似乎太复杂(需要嵌套 for 循环)。
我不知道本地 jinja2 过滤器可以做到这一点。要根据多个属性对列表进行排序,您可以定义一个自定义过滤器 http://jinja.pocoo.org/docs/api/#custom-filters在金贾2。
从接受的答案到这个问题 https://stackoverflow.com/questions/4233476/sort-a-list-by-multiple-attributes,你可以编写自己的过滤器
import operator
def sort_multi(L,*operators):
L.sort(key=operator.itemgetter(*operators))
return L
将其注册到您的应用程序环境中。因此对于pyramid
,你会做类似的事情
env = config.get_jinja2_environment()
env.filters['sort_multi'] = sort_multi
最后在你的模板中
{{item_list|sort_multi('value','color')}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)