Добавить строку в массив и объединить обратно в строку

#jinja2

#jinja2

Вопрос:

Я использую шаблоны Home Assistant, которые запускаются в скрипте Jinja2.

У меня есть группа сущностей ( states.group.doors ), у которых есть атрибут battery_level . Я хочу создать массив объектов с battery_level < min_battery level и отобразить в виде строки, разделенной запятыми.

Я не могу понять, что не так с моим синтаксисом. Два вопроса:

  1. Есть ли в целом лучший способ создать список, который фильтруется battery_level < min_battery_level , а не создавать массив, как я?
  2. Если нет, то, должно быть, что-то не так с тем, как я строю этот массив. Кто-нибудь может это заметить?

Спасибо за помощь.

Следующий код успешно обнаруживает battery_level < 98 и отображает true , соответствует ли что-либо этим критериям, так что я почти на месте.

 {% set min_battery_level = 98 -%}
{% set ns = namespace(found=false, entities=[]) -%}
{% set entities = [] -%}
{% for entity_id in states.group.doors.attributes.entity_id -%}
  {% set parts = entity_id.split('.') -%}
  {% if (state_attr(entity_id, 'battery_level') | replace("%","") | int) < min_battery_level -%}
    {% set ns.found = true -%}
    {% set entities = entities   [entity_id] -%}
  {% endif -%}
{% endfor -%}
{{ ns.found }}
{{ entities | join(' ') }}
 

Ответ №1:

Welp … продолжал играть с ним и заставил его работать следующим образом:

 {% set min_battery_level = 98 -%}
{% set ns = namespace(found=false, entities = []) -%}
{% for entity_id in states.group.doors.attributes.entity_id -%}
  {% set name = state_attr(entity_id, 'friendly_name') | string -%}
  {% set battery = state_attr(entity_id, 'battery_level') | replace("%","") | int -%}
  {% if (battery) < min_battery_level -%}
    {% set ns.found = true -%}
    {% set ns.entities = ns.entities   [name ' (' battery|string '%)'] -%}
  {% endif -%}
{% endfor -%}
{{ ns.found }}
{{ ns.entities | join(', ') }}