Jinja2模板,去掉回车return

Jinja2 templates, remove the carriage return

我使用 Jinja2 模板进行大量网络设备配置,但​​现在我需要制作一行特定的名称以用于报告目的。

我使用的一个Jinja2脚本如下

{% for name in names -%}
{{name}} OR 
{% endfor -%}

它给了我

name1 OR
name2 OR
name3 OR

我在文本中让它看起来像我需要的是“name1 OR name2 OR name3 OR”然后是“name1 OR name2 OR name3”

我正在尝试研究创建一个 Jinja2,它将使我接近或达到我需要的最终格式。

谁能帮我解决这个问题,将不胜感激。

您可以使用loop.last来防止在最后一次迭代中输出,并使用-来删除回车returns。

{% for name in names -%}
{{name}}{{ " OR " if not loop.last else "" -}}
{% endfor -%}

您需要使用 {%- 作为开始标记,以便删除前一个表达式的空格:

from jinja2 import Template

template = '''
{% for name in names -%}
{{name}} OR
{%- endfor -%}
'''
print (Template(template).render(names=['a', 'b', 'c']))

下面的 returns,这可能不是您真正想要的。:)

<newline>
a ORb ORc OR

因此,为了获得想要的结果,模板至少有以下两个选项:

{{ names | join(' OR ') }}

或更短的变体:

{{ " OR ".join(names) }}