当前位置:网站首页 > 技术博客 > 正文

华三交换机配置web登录



官方文档

Jinja 模板只是一个文本文件,可以 基于模板生成任何基于文本的格式(HTML、XML、CSV、LaTeX 等),一般用在前端的项目中,渲染 HTML 文件。

作为网络工程师,可以将其用来批量生成网络设备的配置。

或者其他需要批量生成文本的场景中。

模板包含变量表达式,这两者在模板求值的时候会被替换为值。模板中还有标签,控制模板的逻辑。模板语法的大量灵感来自于 Django 和 Python 。

基本语法:

  • 语句
  • 变量
  • 注释

常用的语句包括:for、if、set、include、block、filter 等

变量通过传递字典来进行使用,当使用 for 语句的时候,变量可以是列表。

创建和渲染模板的最基本方法是通过 ,通过创建一个 的实例,
会得到一个新的模板对象,模板对象有一个 的方法,该方法在调用 dictkeywords 参数时填充模板。

 

一般情况下,我们使用 文件作为模板文件,用法如下:

 

模板 的内容如下

 

最终打印结果如下,传入的 name 被赋值给了模板文件,并输出了最终结果:

 

现在有如模板文件如下:

 

通过传入一个列表来批量生成最终的结果。

 

打印结果如下:

 

通过 for 循环,批量生成了 Hello。

还可以传入列表,列表的值是一个字典,然后通过 for 和字典的 或者 进行取值(和 Python 语法一致),将上面的模板文件改动如下:

 

然后,编写代码如下:

 

打印结果如下:

 

if 语句用来判断,当条件成立时,对语句块文件的内容进行渲染,条件判定失败后则跳过该语句块。

将上文中的 for 循环模板进行修改如下,年龄大于 18 的进行自我介绍。

 

代码与上面 for 语句的例子中相同,仅修改了加载模板的名字,打印结果如下:

 

可以看到,age 小于 18 的,没有输出相应的文字。

使用 语句可以将一个模板完全插入到另一个模板中:

 

另一种继承的方法是使用 语句,子模板引用父模板后,可以指定其中的某些部分,如果子模板中不存在,则使用父模板中的值。父模板也可以将 留空,子模板直接填充内容。

 

来看个例子:

 

执行代码不再赘述,打印结果如下:

 

可以将自己写的函数、导入的模块等更新到环境中,进而在 Jinja2 中使用。

Jinja2 的默认 filter 是一个字典,查看方式:

使用方法:通过更新 environment 中的 filters 字典,在模板环境中注册。

 

在模板中使用:

 

自定义过滤器示例

将 作为过滤器,来实现将传入的 IP 地址变量进行分析。

 

可以自己编写一个函数,然后在模板中调用

 

通过上面的实践,你可能会发现,生成的结果中,有很多空行,默认情况下,jinja2 会给渲染后的结果加上空行。

如果需要去除模板中的空白,如 For 语句前后、变量表达式的开头或结尾添加减号 (-),就会删除这个语句块之前或之后的空格。

以上文中的 for 循环为例,修改模板如下:

 

注意上面的 符号,放在 for 的结尾,是删除语句块之前的空行,放在 endfor 之前,是删除语句块之后的空行,如果前后的空行都删除了,则内容会在同一行,所以,上面模板渲染之后的输出为:

 

具体请根据自己的需求来进行空白行的控制。

实际应用过程中,由于 jinja2 的模板需要传入字典、列表等,为了方便维护,我们可以使用单独的变量文件来存储这些东西,例如 YAML、JSON 等,一般使用 YAML ,因为简洁易读。

 

变量文件如下:

 

代码如下:

 

最终生成了以下配置文件:

 

在实际场景中,可以将固化配置做成模板文件,生成配置时,只要传入指定的参数,就可生成对应的配置,降低配置编写复杂度的同时,也降低了出错的概率。

版权声明


相关文章:

  • 分布式缓存实现原理2025-05-08 07:00:59
  • .ts文件2025-05-08 07:00:59
  • dnn神经网络和bp神经网络2025-05-08 07:00:59
  • 红黑树 map2025-05-08 07:00:59
  • python调用java接口2025-05-08 07:00:59
  • fttbftth的区别2025-05-08 07:00:59
  • layer insulation2025-05-08 07:00:59
  • 在线分词器2025-05-08 07:00:59
  • dns配置实例2025-05-08 07:00:59
  • py pyc文件2025-05-08 07:00:59