我有一个包含字典列表的Jinja模板。顺序很重要。我想根据字典中的键/值来减少列表或查找值。以下是一个示例:
{%
set ordered_dicts = [
{
'id': 'foo',
'name': 'My name is Foo'
},
{
'id': 'bar',
'name': 'My name is Bar'
}
]
%}
如果我有一个变量some_id = 'foo'
,我该如何从我的Jinja模板的ordered_dicts
中获取'My name is Foo'
?我尝试了select()
和selectattr()
,但根据文档无法弄清楚它们的用法。以下是我的尝试:{{ ordered_dicts|selectattr("id", "foo") }}
那将输出:
<generator object _select_or_reject at 0x10748d870>
我觉得我没有正确理解select()
和selectattr()
的使用方法。
我需要遍历列表并手动查找吗?
更新:
正如codegeek和gipi指出的那样,我需要像这样对生成器进行处理:
{{ ordered_dicts|selectattr("id", "foo")|list }}
出现的错误:TemplateRuntimeError: no test named 'foo'
,这表明了selectattr()
如何工作。第二个参数必须是内置测试之一。据我所知,这些测试都不能让我检查与键相关联的值是否与另一个值匹配。以下是我想做的:
{{ ordered_dicts|selectattr("id", "sameas", "foo")|list }}
但是这并不起作用,因为“sameas”测试检查的是两个对象是否真正相同,而不是两个字符串/数字是否等效。
那么,是否有可能根据键/值比较测试选择一个项目?