Jinja2 模板使用简析

您所在的位置:网站首页 dedecms模板引擎 Jinja2 模板使用简析

Jinja2 模板使用简析

#Jinja2 模板使用简析| 来源: 网络整理| 查看: 265

简介

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