特点

  1. 语法简洁:Jinja2使用简洁而易读的语法,使用大括号{{ }}表示变量插值,使用{% %}表示控制流语句(如条件和循环),以及使用{# #}表示注释

  2. 变量插值:Jinja2允许在模板中插入变量的值。可以将变量直接插入到模板中,或者使用过滤器对变量进行处理和格式化

  3. 控制流语句:Jinja2支持条件语句(如ifelseelif)和循环语句(如forwhile)。这些语句允许根据条件或迭代集合来控制模板的输出

  4. 模板继承:Jinja2支持模板继承,可以定义一个基础模板(父模板),然后在派生模板(子模板)中根据需要重写和扩展父模板的内容

  5. 过滤器和函数:Jinja2提供了多个内置过滤器和函数,用于对变量进行处理和转换。可以使用这些过滤器和函数对变量进行格式化、截取、排序等操作

  6. 宏(Macro):宏是一种用于定义可重用代码块的机制。可以使用宏来定义一段代码,并在模板的其他地方多次调用该代码块

  7. 自定义扩展:Jinja2允许开发者自定义扩展,以增加额外的功能和语法。可以编写自定义过滤器、函数、测试等,以满足特定的需求

短横线

在Jinja2模板语言中,花括号 {} 用来包裹模板标签,而短横线 - 在某些情况下用于移除生成的HTML或文本输出中的空白字符,包括换行和空格。在循环 {% for ... %} 结构中,前后添加 -(即 {%- %}% -})是为了避免在生成的输出中产生不必要的空白。

具体来说,{%- for ip in ctl_ips -%} 这样的写法意在:

  • 移除循环开始之前的空白:确保循环开始前的任何潜在空白不会出现在生成的输出中。
  • 移除循环结束之后的空白:确保循环结束后不会留下额外的空白。

这在生成HTML或配置文件时尤为重要,因为不必要的空白可能会导致格式问题,尤其是在需要严格格式化的场景中,比如XML或YAML文件。

例如,假设有一个简单的循环,用于生成一系列逗号分隔的IP地址:

{%- for ip in ctl_ips -%}
{{ ip }},
{%- endfor -%}

如果没有使用短横线,每次循环结束时可能会生成额外的换行和空格,导致输出如:

192.168.1.1,
 
192.168.1.2,
 
192.168.1.3,

而使用短横线 {%- for ... -%}{%- endfor -%} 后,输出将是连续的,没有额外的空白:

192.168.1.1,192.168.1.2,192.168.1.3,

当然,可能还需要考虑循环结束后的逗号是否多余,这取决于的具体需求。