gpt4 book ai didi

python - 如何在 Flask/Jinja 中选择/减少字典列表

转载 作者:IT老高 更新时间:2023-10-28 20:53:12 26 4
gpt4 key购买 nike

我有一个带有字典列表的 Jinja 模板。订单很重要。我想根据字典的键/值减少列表或查找值。这是一个例子:

{%
set ordered_dicts = [
{
'id': 'foo',
'name': 'My name is Foo'
},
{
'id': 'bar',
'name': 'My name is Bar'
}
]
%}

如果我有一个变量 some_id = 'foo',我如何从我的 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() 的工作原理。第二个参数必须是 the builtin tests 之一.据我所知,这些测试都不会让我检查与键关联的值是否与另一个值匹配。这是我想做的:

{{ ordered_dicts|selectattr("id", "sameas", "foo")|list }}

但这不起作用,因为 sameas 测试检查两个对象是否真的是内存中的同一个对象,而不是两个字符串/数字是否相等。

那么是否可以根据键/值比较测试来选择项目?

最佳答案

我刚刚像这样向后移植了 equalto:

app.jinja_env.tests['equalto'] = lambda value, other : value == other

之后this example from 2.8 docs作品:

{{ users|selectattr("email", "equalto", "foo@bar.invalid") }}

更新:Flask 有一个用于注册测试的装饰器,语法更简洁:http://flask.pocoo.org/docs/api/#flask.Flask.template_test

关于python - 如何在 Flask/Jinja 中选择/减少字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20529234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com