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、执行脚本
- [root@test1 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、执行脚本
- [root@test1 rubbish]# python kube-flannel.yml.py
- hello "ens33"
- 可以看到模板文件里面的变量都被替换掉了
jinja2渲染使用的更多相关文章
- [Flask]jinja2渲染分页导航部件
注意: 1.在视图函数中通过request.args.get('page')获取page数,并将page传给macros.html模板文件 效果: 点击8,就跳转到第8页数据了 视图函数 @app.r ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- 模板渲染JinJa2
模板渲染JinJa2 可以从数据库中查询数据,然后去替换我html中的对应内容(专业名词叫做模板渲染,你先渲染一下,再给浏览器进行渲染),然后再发送给浏览器完成渲染. 这个过程就相当于HTML模板 ...
- Flask06 地址约定、利用falsk提供的方法渲染模板
1 访问地址约定 在访问路径的末尾是否需要加 / -> 可以加,也可以不加 前端的访问路径必须和后端的路径完全匹配才能够访问成功,如果我们在后台的路径都是以 / 结尾,但是我们的访问路径是没有以 ...
- Django框架简介,wsgiref 与 jinja2 模块
目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...
- 5.Ansible Jinja2 模板
1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的 jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? te ...
- Ansible Jinja2 模板
1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的? jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? t ...
- Ansible --05 ansible jinja2
ansible jinja2 什么是jinjia2模板 jinjia2是Python的全功能模块引擎 Jinjia2与Ansible的关系 Ansible通常会使用jinjia2模板来修改被管理主机的 ...
- 模板渲染jnja2模块
模板渲染jnja2模块 模板的引入: 在返回动态页面时,上述我们在08版web框架返回每次访问的时间,利用自己写的占位符进行字符串替换进行动态响应: 在实际应用中,完全可以从数据库中读取数据,然后替换 ...
随机推荐
- 块格式化上下文(Block Formatting Context,BFC)
块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. 下列方式会创建块格 ...
- Java常用类(一)Math类和Random类
一.Math类 Math类中有一些常用的数学函数,比较简单,不进行详细解释,仅举例说明: 1.绝对值和取整 import java.lang.Math; public class Mat { publ ...
- 原来你是这样的 jsonp(原理与具体实现细节)
前言 原文地址 仓库地址 jsonp(JSON with padding)你一定不会陌生,前端向后端拿数据的方式之一,也是处理跨域请求的得利助手. 我们早已习惯,早已熟练了jQ或者zepto的ajax ...
- Linux-Shell编程之创建shell脚本并执行
1.创建文件 touch myFirst.sh 2.编辑文件 vi myFirst.sh 点击键盘的字母 I 进行编辑,输入一下内容 #!/bin/bash # My First script ls ...
- keras手写数字识别
import kerasimport timefrom keras.utils import np_utils start = time.time()(x_train, y_train), (x_te ...
- K8s中RS和Deployment
什么是ReplicaSet? ReplicaSet是下一代复本控制器.ReplicaSet和 Replication Controller之间的唯一区别是现在的选择器支持.Replication Co ...
- [c++] C++多态(虚函数和虚继承)
转自:https://www.jianshu.com/p/02183498a2c2 面向对象的三大特性是封装.继承和多态.多态是非常重要的一个特性,C++多态基于虚函数和虚继承实现,本文将完整挖掘C+ ...
- SpringBoot的文件上传&下载
前言:不多BB直接上代码 文件上传 pom依赖添加commons-io <!-- 上传/下载jar https://mvnrepository.com/artifact/commons-io/c ...
- Leetcode题目20.有效的括号(简单)
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符 ...
- (转载)Zookeeper的功能以及工作原理
本文转载自:https://www.cnblogs.com/felixzh/p/5869212.html 1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式 ...