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框架返回每次访问的时间,利用自己写的占位符进行字符串替换进行动态响应: 在实际应用中,完全可以从数据库中读取数据,然后替换 ...
随机推荐
- 异步消息处理机制相关面试问题-handlerThread面试问题详解
handlerThread产生背景: 开启Thread子线程进行耗时操作,多次创建和销毁线程是很耗系统资源的. handlerThread是什么? handler + thread + looper ...
- linux内核 概念
内核Kernel只是操作系统的一部分,操作系统本身在内核之上还包含命令行shell和其他种类的用户界面. 通常内核包含: 中断服务程序 进程管理和调度程序 内存管理程序 进程同步方法 IO和设备等 在 ...
- tensorflow2.0 在pycharm下提示问题
tensorflow2.0 使用keras一般通过tensorflow.keras来使用,但是pycharm没有提示,原因是因为实际的keras路径放在tensorflow/python/keras, ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第十七周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第十七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...
- linux 下 svn 重新定位 url
linux下重新定位SVN URL方法: 如果更换了SVN服务器,就需要重新定位,指向新的SVN URL. 重新定位命令:svn switch --relocate 原svn地址 新svn地址 ...
- HDU 6044 - Limited Permutation | 2017 Multi-University Training Contest 1
研究一下建树 : /* HDU 6044 - Limited Permutation [ 读入优化,笛卡尔树 ] | 2017 Multi-University Training Contest 1 ...
- SQL CASE Syntax
CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE ...
- Android源码开发利器——Java源码调试(基于4.1.2)
原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038 调试Android Java源码 草帽的后花园——Neo 写在之前的 ...
- Parallels Desktop 安装centos7
配置网卡: vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改BOOTPROTO=dhcp,ONBOOT=yes. 保存后重启网卡 service netw ...
- JVM GC之对象生死
1.简述 在Java内存运行时区域的各个部分中,程序计数器.虚拟机栈.本地方法栈3个区域随着线程而生,随着线程而亡.栈中的栈帧随着方法的进入和退出而有条不紊的进行着入栈和出栈操作. 每个栈帧需要分配多 ...