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

hea*_*low 5 python enums jinja2

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

{% set ys = xs | selectattr("type", "equalto", "first") | list %}
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用变量(在我的例子中是枚举的属性),我会得到一个空列表

{% set ys = xs | selectattr("type", "equalto", MyEnum.FIRST) | list %}
Run Code Online (Sandbox Code Playgroud)

该变量MyEnum.FIRST包含字符串“first”。

Mar*_*ers 3

您正确地传递了一个变量,但如果您现在得到一个空列表,则MyEnum.FIRST不会生成 string 'first'

如果MyEnumenum.Enum子类,那么属性将是该类的实例。使用该.value属性获取实际的字符串值:

{% set ys = xs | selectattr("type", "equalto", MyEnum.FIRST.value) | list %}
Run Code Online (Sandbox Code Playgroud)

快速演示,展示枚举的工作原理以及为什么需要该属性:

>>> import enum
>>> class MyEnum(enum.Enum):
...     FIRST = 'first'
...     SECOND = 'second'
...
>>> MyEnum.FIRST
<MyEnum.FIRST: 'first'>
>>> MyEnum.FIRST.value
'first'
Run Code Online (Sandbox Code Playgroud)