У меня есть шаблон Jinja со списком словарей. Вопросы для заказа. Я хотел бы уменьшить значения списка или поиска на основе ключей/значений словарей. Вот пример:
{%
set ordered_dicts = [
{
'id': 'foo',
'name': 'My name is Foo'
},
{
'id': 'bar',
'name': 'My name is Bar'
}
]
%}
Если у меня есть переменная some_id = 'foo'
, как мне получить 'My name is Foo'
из ordered_dicts
в моем шаблоне Jinja?
Я попробовал select()
и selectattr()
, но не смог понять их на основе документация. Вот что я пробовал:
{{ ordered_dicts|selectattr("id", "foo") }}
Это выводит:
<generator object _select_or_reject at 0x10748d870>
Я не думаю, что правильно понимаю select()
и selectattr()
.
Нужно ли мне перебирать список и выполнять поиск вручную?
Обновление:
Как указывал Codegeek и Гипи, мне нужно сделать что-то подобное с генератором:
{{ ordered_dicts|selectattr("id", "foo")|list }}
Полученная ошибка: TemplateRuntimeError: no test named 'foo'
, которая разъясняет, как работает selectattr()
. Второй аргумент должен быть одним из встроенных тестов. Насколько я могу судить, ни один из этих тестов не позволит мне проверить, соответствует ли значение, связанное с ключом, другим значением. Вот что я хотел бы сделать:
{{ ordered_dicts|selectattr("id", "sameas", "foo")|list }}
Но это не работает, так как тест sameas
проверяет, являются ли два объекта действительно одним и тем же объектом в памяти, а не эквивалентны две строки/числа.
Итак, можно ли выбрать элемент на основе теста сравнения ключей/значений?