特点
-
语法简洁:Jinja2使用简洁而易读的语法,使用大括号
{{ }}
表示变量插值,使用{% %}
表示控制流语句(如条件和循环),以及使用{# #}
表示注释 -
变量插值:Jinja2允许在模板中插入变量的值。可以将变量直接插入到模板中,或者使用过滤器对变量进行处理和格式化
-
控制流语句:Jinja2支持条件语句(如
if
、else
、elif
)和循环语句(如for
、while
)。这些语句允许根据条件或迭代集合来控制模板的输出 -
模板继承:Jinja2支持模板继承,可以定义一个基础模板(父模板),然后在派生模板(子模板)中根据需要重写和扩展父模板的内容
-
过滤器和函数:Jinja2提供了多个内置过滤器和函数,用于对变量进行处理和转换。可以使用这些过滤器和函数对变量进行格式化、截取、排序等操作
-
宏(Macro):宏是一种用于定义可重用代码块的机制。可以使用宏来定义一段代码,并在模板的其他地方多次调用该代码块
-
自定义扩展:Jinja2允许开发者自定义扩展,以增加额外的功能和语法。可以编写自定义过滤器、函数、测试等,以满足特定的需求
短横线
在Jinja2模板语言中,花括号 {
和 }
用来包裹模板标签,而短横线 -
在某些情况下用于移除生成的HTML或文本输出中的空白字符,包括换行和空格。在循环 {% for ... %}
结构中,前后添加 -
(即 {%- %}
或 % -}
)是为了避免在生成的输出中产生不必要的空白。
具体来说,{%- for ip in ctl_ips -%}
这样的写法意在:
- 移除循环开始之前的空白:确保循环开始前的任何潜在空白不会出现在生成的输出中。
- 移除循环结束之后的空白:确保循环结束后不会留下额外的空白。
这在生成HTML或配置文件时尤为重要,因为不必要的空白可能会导致格式问题,尤其是在需要严格格式化的场景中,比如XML或YAML文件。
例如,假设有一个简单的循环,用于生成一系列逗号分隔的IP地址:
如果没有使用短横线,每次循环结束时可能会生成额外的换行和空格,导致输出如:
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,
当然,可能还需要考虑循环结束后的逗号是否多余,这取决于的具体需求。