Получить значение из dict после применения фильтра Jinja2 - PullRequest
0 голосов
/ 03 марта 2020

Я использую шаблон Jinja2, со словарем. Вот примеры:

Мой словарь:

context = {
    "lead":{
        "name": "Cool lead with top sale",
        "sale": 1
    },
    "contacts": [
        {
            "name": "John Doe",
            "tags": ['vasya']
        },
        {
            "name": "Nick Snow",
            "tags": ['petya']
        }
    ]
}

Я хочу получить имя контакта, но только одно, которое имеет тег 'petya'. Я создал фильтр:

def has_tag(entity, tagname):
    contact = list(filter(lambda x: tagname in x['tags'], entity))[0]
    return contact

Наконец, я хочу получить доступ к значению в моем шаблоне с помощью чего-то вроде этого:

{{ contacts | has_tag('petya') .name }} 

или

{{ contacts | has_tag('petya') | .name }} 

Но я не могу понять - как я могу это сделать? Потому что | использует только для фильтров. Я не могу использовать selectattr , потому что может быть много вложенных диктовок, например contacts.responsible_user.phone.mobile et c.

Пожалуйста, дайте мне совет, как я могу это сделать. Спасибо!

1 Ответ

0 голосов
/ 03 марта 2020

Используйте {% set %}, чтобы назначить отфильтрованный контакт переменной:

{% set petya = contacts | has_tag('petya') %}
{% if petya %}
  {{ petya.responsible_user.phone.mobile }}
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...