Jinja2 模板使用简析 |
您所在的位置:网站首页 › dedecms模板引擎 › Jinja2 模板使用简析 |
简介
Jinja2是由Python实现的被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。由于性能快,安全性高,被各种应用框架广泛使用,尤其是Python的Web项目。官网地址:http://jinja.pocoo.org/ 相比其他模板语言,有以下几个优点: 比较灵活,提供了控制结构,表达式和继承等; 简便,只有控制结构,不允许模板中有太多的业务逻辑; 性能好,模板的可读性强。为了实现产品的自动化部署,在不同型号的服务器中对产品的标准化配置,选择 Jinja2 作为模板语言,可以达到事半功倍的目的。 本文简单介绍 Jinja2 模板的使用,对于其实现,可参考官网 语法Jinja2 主要有三种语法: 控制结构 {% %} 变量取值 {{ }} 注释 {# #} ; 模板渲染的时候会忽视这中间的值。 过滤器过滤器可以理解为 Jinja2 的内置函数和字符串处理函数等,变量可以使用它们进行修改或转换。常用的过滤器有: safe: 渲染时值不转义; capitialize: 把值的首字母转换成大写,其他子母转换为小写; lower: 把值转换成小写形式; upper: 把值转换成大写形式; title: 把值中每个单词的首字母都转换成大写; trim: 把值的首尾空格去掉; striptags: 渲染之前把值中的HTML标签删掉; join: 拼接多个值为字符串; replace: 替换字符串的值; round: 默认对数字进行四舍五入,也可以用参数进行控制; int: 把值转换成整型。对于配置文件使用的模板,除了上面的字符串、数值过滤器,常用的还有列表、字典使用的过滤器: first/last: 返回列表第/最后一个元素; sum: 列表求和; sort: 列表排序,默认升序排序; lenght/count: 返回列表长度; grouby: 列表分组。 测试器测试器用来测试一个变量或者表达式,返回一个布尔值,关键字是 is. 常用的测试器有: callable: 是否可调用; defined: 是否已经被定义了; escaped: 是否已经被转义了; uppe: 是否全是大写; lower: 是否全是小写; string: 是否是一个字符串; sequence: 是否是一个序列; number: 是否是一个数字;( odd: 是否是奇数; even: 是否是偶数。 控制语句Jinja2的控制语句主要包括条件控制语句 if,和循环控制语句 for,语法接近 python。更多详细使用参考 Jinja2 模板设计者文档 — Jinja2 中文手册 2.8 documentation (ainoob.cn) 示例如下实现了一个简单的自动化适配VPP的配置模板,可根据一个简单的yaml配置文件,轻松生成相应的VPP的配置文件: unix { nodaemon cli-prompt {{ cli_prompt | default("cli-tgw#") }} cli-no-banner log /var/log/vpp/vpp.log full-coredump cli-listen /run/vpp/cli.sock gid vpp exec /etc/vpp/init.dat } api-trace { on } api-segment { gid vpp } socksvr { default } cpu { main-core {{ main_core | default(0) }} corelist-workers {{ workers | default("1-8") }} } dpdk { socket-mem {{ socket_mem | default(65535) }} {% if num_mbufs is not defined %} {% set num_mbufs="12600" %} {% endif %} num-mbufs {{ num_mbufs }} dev default { {% if dev_rx_queues is defined %} num-rx-queues {{ dev_rx_queues }} {% endif %} num-rx-desc {{ dev_rx_desc|default(512) }} num-tx-desc {{ dev_tx_desc|default(512) }} } {% if not tx_offload %} no-tx-checksum-offload {% endif %} {% if not multi_seg %} no-multi-seg {% endif %} {% for iface in nics %} {% if iface.pci_id %} dev {{ iface.pci_id }} { name {{ iface.name }} } {% endif %} {% endfor %} uio-driver {{ uio_driver | default("igb_uio") }} } heapsize {{ heapsize | default("2G") }} |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |