1. 说明:通过jinja2渲染后只能打印出来效果,目前无法保存
  2.  
  3. 1:渲染 .j2 文件
  4.  
  5. 1、安装jinja2模块
  6.  
  7. pip3 install jinja2
  8.  
  9. 2、定义模板
  10.  
  11. 说明:变量必须是小写,大写有的情况无法替换,亲测;模板必须是j2结尾或者jinja2默认支持的html格式
  12.  
  13. 本实例的文档是不全的,只是截取了其中一段作为例子进行演示
  14.  
  15. 本实例模板中定义了两个需要被渲染的变量
  16.  
  17. {{ cluster_cidr }} { iface }}
  18.  
  19. cat >kube-flannel.yml.template.j2 <<EOF
  20. kind: ConfigMap
  21. apiVersion: v1
  22. metadata:
  23. name: kube-flannel-cfg
  24. namespace: kube-system
  25. labels:
  26. tier: node
  27. app: flannel
  28. data:
  29. net-conf.json: |
  30. {
  31. "Network": "{{ cluster_cidr }}",
  32. "Backend": {
  33. "Type": "vxlan"
  34. }
  35. }
  36. ---
  37. apiVersion: extensions/v1beta1
  38. kind: DaemonSet
  39. spec:
  40. template:
  41. metadata:
  42. labels:
  43. tier: node
  44. app: flannel
  45.  
  46. - /opt/bin/flanneld
  47. args:
  48. - --ip-masq
  49. - --kube-subnet-mgr
  50. - --iface={{ iface }}
  51. resources:
  52. EOF
  53.  
  54. 3、定义脚本
  55.  
  56. cat >kube-flannel.yml.py<<EOF
  57. #!/usr/bin/python
  58. # -*- codinig: UTF-8 -*-
  59.  
  60. import os
  61. import jinja2
  62.  
  63. #定义模板函数,这个必须有,没有模板函数是无法实现替换的
  64.  
  65. def render(tpl_path,**kwargs):
  66. path,filename=os.path.split(tpl_path)
  67. return jinja2.Environment(
  68. loader=jinja2.FileSystemLoader(path or './')
  69. ).get_template(filename).render(**kwargs)
  70.  
  71. def test_simple():
  72. iface="ens33"
  73. cluster_cidr="172.30.0.0/16"
  74. result=render('/rubbish/kube-flannel.yml.template.j2',**locals())
  75. print(result)
  76. if __name__ == '__main__':
  77. test_simple()
  78. EOF
  79.  
  80. 4、执行脚本
  81.  
  82. [root@test1 rubbish]# python kube-flannel.yml.py
  83. kind: ConfigMap
  84. apiVersion: v1
  85. metadata:
  86. name: kube-flannel-cfg
  87. namespace: kube-system
  88. labels:
  89. tier: node
  90. app: flannel
  91. data:
  92. net-conf.json: |
  93. {
  94. "Network": "172.30.0.0/16",
  95. "Backend": {
  96. "Type": "vxlan"
  97. }
  98. }
  99. ---
  100. apiVersion: extensions/v1beta1
  101. kind: DaemonSet
  102. spec:
  103. template:
  104. metadata:
  105. labels:
  106. tier: node
  107. app: flannel
  108.  
  109. - /opt/bin/flanneld
  110. args:
  111. - --ip-masq
  112. - --kube-subnet-mgr
  113. - --iface=ens33
  114. resources:
  115.  
  116. 可以看到模板文件里面的变量都被替换掉了,替换效果如下:
  117.  
  118. "Network": "172.30.0.0/16",
  119.  
  120. - --iface=ens33
  121.  
  122. 实例2:渲染.txt文件
  123.  
  124. 1、安装jinja2模块
  125.  
  126. pip3 install jinja2
  127.  
  128. 2、定义模板
  129.  
  130. 说明:变量必须是小写,大写有的情况无法替换,亲测;模板必须是j2结尾或者jinja2默认支持的html格式
  131.  
  132. 本实例的文档是不全的,只是截取了其中一段作为例子进行演示
  133.  
  134. 本实例模板中定义了一个需要被渲染的变量
  135.  
  136. { iface }}
  137.  
  138. cat >a.txt <<EOF
  139. hello "{{ iface }}"
  140. EOF
  141.  
  142. 3、定义脚本
  143.  
  144. cat >kube-flannel.yml.py<<EOF
  145. #!/usr/bin/python
  146. # -*- codinig: UTF-8 -*-
  147.  
  148. import os
  149. import jinja2
  150.  
  151. #定义模板函数,这个必须有,没有模板函数是无法实现替换的
  152.  
  153. def render(tpl_path,**kwargs):
  154. path,filename=os.path.split(tpl_path)
  155. return jinja2.Environment(
  156. loader=jinja2.FileSystemLoader(path or './')
  157. ).get_template(filename).render(**kwargs)
  158.  
  159. def test_simple():
  160. iface="ens33"
  161. cluster_cidr="172.30.0.0/16"
  162. result=render('/rubbish/a.txt',**locals())
  163. print(result)
  164. if __name__ == '__main__':
  165. test_simple()
  166. EOF
  167.  
  168. 4、执行脚本
  169.  
  170. [root@test1 rubbish]# python kube-flannel.yml.py
  171. hello "ens33"
  172.  
  173. 可以看到模板文件里面的变量都被替换掉了

jinja2渲染使用的更多相关文章

  1. [Flask]jinja2渲染分页导航部件

    注意: 1.在视图函数中通过request.args.get('page')获取page数,并将page传给macros.html模板文件 效果: 点击8,就跳转到第8页数据了 视图函数 @app.r ...

  2. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  3. 模板渲染JinJa2

    模板渲染JinJa2 ​ 可以从数据库中查询数据,然后去替换我html中的对应内容(专业名词叫做模板渲染,你先渲染一下,再给浏览器进行渲染),然后再发送给浏览器完成渲染. 这个过程就相当于HTML模板 ...

  4. Flask06 地址约定、利用falsk提供的方法渲染模板

    1 访问地址约定 在访问路径的末尾是否需要加 / -> 可以加,也可以不加 前端的访问路径必须和后端的路径完全匹配才能够访问成功,如果我们在后台的路径都是以 / 结尾,但是我们的访问路径是没有以 ...

  5. Django框架简介,wsgiref 与 jinja2 模块

    目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...

  6. 5.Ansible Jinja2 模板

    1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的 jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? te ...

  7. Ansible Jinja2 模板

    1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的? jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? t ...

  8. Ansible --05 ansible jinja2

    ansible jinja2 什么是jinjia2模板 jinjia2是Python的全功能模块引擎 Jinjia2与Ansible的关系 Ansible通常会使用jinjia2模板来修改被管理主机的 ...

  9. 模板渲染jnja2模块

    模板渲染jnja2模块 模板的引入: 在返回动态页面时,上述我们在08版web框架返回每次访问的时间,利用自己写的占位符进行字符串替换进行动态响应: 在实际应用中,完全可以从数据库中读取数据,然后替换 ...

随机推荐

  1. 块格式化上下文(Block Formatting Context,BFC)

    块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. 下列方式会创建块格 ...

  2. Java常用类(一)Math类和Random类

    一.Math类 Math类中有一些常用的数学函数,比较简单,不进行详细解释,仅举例说明: 1.绝对值和取整 import java.lang.Math; public class Mat { publ ...

  3. 原来你是这样的 jsonp(原理与具体实现细节)

    前言 原文地址 仓库地址 jsonp(JSON with padding)你一定不会陌生,前端向后端拿数据的方式之一,也是处理跨域请求的得利助手. 我们早已习惯,早已熟练了jQ或者zepto的ajax ...

  4. Linux-Shell编程之创建shell脚本并执行

    1.创建文件 touch myFirst.sh 2.编辑文件 vi myFirst.sh 点击键盘的字母 I 进行编辑,输入一下内容 #!/bin/bash # My First script ls ...

  5. keras手写数字识别

    import kerasimport timefrom keras.utils import np_utils start = time.time()(x_train, y_train), (x_te ...

  6. K8s中RS和Deployment

    什么是ReplicaSet? ReplicaSet是下一代复本控制器.ReplicaSet和 Replication Controller之间的唯一区别是现在的选择器支持.Replication Co ...

  7. [c++] C++多态(虚函数和虚继承)

    转自:https://www.jianshu.com/p/02183498a2c2 面向对象的三大特性是封装.继承和多态.多态是非常重要的一个特性,C++多态基于虚函数和虚继承实现,本文将完整挖掘C+ ...

  8. SpringBoot的文件上传&下载

    前言:不多BB直接上代码 文件上传 pom依赖添加commons-io <!-- 上传/下载jar https://mvnrepository.com/artifact/commons-io/c ...

  9. Leetcode题目20.有效的括号(简单)

    题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符 ...

  10. (转载)Zookeeper的功能以及工作原理

    本文转载自:https://www.cnblogs.com/felixzh/p/5869212.html 1.ZooKeeper是什么?       ZooKeeper是一个分布式的,开放源码的分布式 ...