#python #jinja2
Вопрос:
Я использую шаблоны Jinja2 для множества конфигураций сетевых устройств, но теперь мне нужно создать конкретную строку имен для целей отчетности.
Сценарий Jinja2, который я использую, выглядит следующим образом
{% for name in names -%}
{{name}} OR
{% endfor -%}
Это дает мне
name1 OR
name2 OR
name3 OR
что в тексте я делаю так, чтобы это выглядело так, как будто мне нужно «имя 1, ИЛИ имя 2, ИЛИ имя 3, ИЛИ» затем «имя 1, ИЛИ имя 2, ИЛИ имя 3».
Я пытаюсь исследовать создание Jinja2, который приблизит меня к окончательному формату, который мне нужен.
Мог бы кто-нибудь помочь мне в этом, я был бы очень признателен.
Комментарии:
1. Так ты хочешь этого трейлинга
OR
или нет? Это не совсем ясно из вашего вопроса.
Ответ №1:
Вы можете использовать loop.last
для предотвращения вывода ИЛИ в рамках последней итерации и использовать -
для удаления возвратов каретки.
{% for name in names -%}
{{name}}{{ " OR " if not loop.last else "" -}}
{% endfor -%}
Ответ №2:
Вам нужно использовать {%-
тег as start, чтобы удалить пробелы для предыдущего выражения:
from jinja2 import Template
template = '''
{% for name in names -%}
{{name}} OR
{%- endfor -%}
'''
print (Template(template).render(names=['a', 'b', 'c']))
Это возвращает следующее, что, вероятно, не то, что вы на самом деле хотели.. 🙂
<newline>
a ORb ORc OR
Таким образом, чтобы получить желаемый результат, существует по крайней мере два следующих варианта шаблона:
{{ names | join(' OR ') }}
или даже более короткий вариант:
{{ " OR ".join(names) }}