- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个带有字典列表的 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/
我是一名优秀的程序员,十分优秀!