如何在jinja2 selectattr过滤器中使用变量?

时间:2018-02-21 11:59:14

标签: python enums jinja2

我试图根据属性过滤列表。如果我将该属性用作字符串,一切正常:

{% set ys = xs | selectattr("type", "equalto", "first") | list %}

如果我尝试使用变量(在我的情况下是枚举的属性),我会返回一个空列表

{% set ys = xs | selectattr("type", "equalto", MyEnum.FIRST) | list %}

变量MyEnum.FIRST包含字符串" first"。

1 个答案:

答案 0 :(得分:1)

您正确传入变量,但如果现在获得一个空列表,则'first'不会生成字符串MyEnum

如果{% set ys = xs | selectattr("type", "equalto", MyEnum.FIRST.value) | list %} enum.Enum subclass,则属性将是该类的实例。使用.value attribute获取实际的字符串值:

>>> import enum
>>> class MyEnum(enum.Enum):
...     FIRST = 'first'
...     SECOND = 'second'
...
>>> MyEnum.FIRST
<MyEnum.FIRST: 'first'>
>>> MyEnum.FIRST.value
'first'

快速演示以展示枚举的工作方式以及您需要属性的原因:

{{1}}