jinja2渲染使用

Posted effortsing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jinja2渲染使用相关的知识,希望对你有一定的参考价值。

说明:通过jinja2渲染后只能打印出来效果,目前无法保存

例1:渲染 .j2 文件
1、安装jinja2模块 pip3 install jinja2 2、定义模板 说明:变量必须是小写,大写有的情况无法替换,亲测;模板必须是j2结尾或者jinja2默认支持的html格式 本实例的文档是不全的,只是截取了其中一段作为例子进行演示 本实例模板中定义了两个需要被渲染的变量 {{ cluster_cidr }} { iface }} cat >kube-flannel.yml.template.j2 <<EOF kind: ConfigMap apiVersion: v1 metadata: name: kube-flannel-cfg namespace: kube-system labels: tier: node app: flannel data: net-conf.json: | { "Network": "{{ cluster_cidr }}", "Backend": { "Type": "vxlan" } } --- apiVersion: extensions/v1beta1 kind: DaemonSet spec: template: metadata: labels: tier: node app: flannel - /opt/bin/flanneld args: - --ip-masq - --kube-subnet-mgr - --iface={{ iface }} resources: EOF 3、定义脚本 cat >kube-flannel.yml.py<<EOF #!/usr/bin/python # -*- codinig: UTF-8 -*- import os import jinja2 #定义模板函数,这个必须有,没有模板函数是无法实现替换的 def render(tpl_path,**kwargs): path,filename=os.path.split(tpl_path) return jinja2.Environment( loader=jinja2.FileSystemLoader(path or ./) ).get_template(filename).render(**kwargs) def test_simple(): iface="ens33" cluster_cidr="172.30.0.0/16" result=render(/rubbish/kube-flannel.yml.template.j2,**locals()) print(result) if __name__ == __main__: test_simple() EOF 4、执行脚本 [[email protected] rubbish]# python kube-flannel.yml.py kind: ConfigMap apiVersion: v1 metadata: name: kube-flannel-cfg namespace: kube-system labels: tier: node app: flannel data: net-conf.json: | { "Network": "172.30.0.0/16", "Backend": { "Type": "vxlan" } } --- apiVersion: extensions/v1beta1 kind: DaemonSet spec: template: metadata: labels: tier: node app: flannel - /opt/bin/flanneld args: - --ip-masq - --kube-subnet-mgr - --iface=ens33 resources: 可以看到模板文件里面的变量都被替换掉了,替换效果如下: "Network": "172.30.0.0/16", - --iface=ens33 实例2:渲染.txt文件 1、安装jinja2模块 pip3 install jinja2 2、定义模板 说明:变量必须是小写,大写有的情况无法替换,亲测;模板必须是j2结尾或者jinja2默认支持的html格式 本实例的文档是不全的,只是截取了其中一段作为例子进行演示 本实例模板中定义了一个需要被渲染的变量 { iface }} cat >a.txt <<EOF hello "{{ iface }}" EOF 3、定义脚本 cat >kube-flannel.yml.py<<EOF #!/usr/bin/python # -*- codinig: UTF-8 -*- import os import jinja2 #定义模板函数,这个必须有,没有模板函数是无法实现替换的 def render(tpl_path,**kwargs): path,filename=os.path.split(tpl_path) return jinja2.Environment( loader=jinja2.FileSystemLoader(path or ./) ).get_template(filename).render(**kwargs) def test_simple(): iface="ens33" cluster_cidr="172.30.0.0/16" result=render(/rubbish/a.txt,**locals()) print(result) if __name__ == __main__: test_simple() EOF 4、执行脚本 [[email protected] rubbish]# python kube-flannel.yml.py hello "ens33" 可以看到模板文件里面的变量都被替换掉了

 



以上是关于jinja2渲染使用的主要内容,如果未能解决你的问题,请参考以下文章

Jinja2模板引擎简介

网站后端_Python+Flask.0014.FLASK模版相关之使用JinJa2模版渲染?

Jinja2:说“在另一个宏或模板中渲染这个宏”

使用 jinja2 和 weasyprint 在 PDF 渲染中忽略图像

flask 渲染jinja2模版和传参

渲染 Jinja2 宏而不影响模板其余部分的内容