介绍
Jinja2是python开发中常见的模板系统,我们可以通过调用模板并传递参数来实现生成配置文件或者HTML页,此文档主要介绍生成配置文件。
使用方法
方式一:字符串模板
from jinja2 import Template
vlan_var = 101
template = Template('vlan {{id}}\n'
'name VLAN_{{id}}')
vlan_output = template.render(id=vlan_var)
方式二:PackageLoader 从python包中加载模板。
class PackageLoader(package_name, package_path=‘templates’,
encoding=‘utf-8’, cache_size=50, auto_reload=True)
from jinja2 import PackageLoader,Environment
env = Environment(loader=PackageLoader('python_project','templates')) # 创建一个包加载器对象
template = env.get_template('bast.html') # 获取一个模板文件
template.render(name='daxin',age=18) # 渲染
方式三(推荐使用方式):FileSystemLoader
FileSystemLoader(searchpath, encoding=‘utf-8’, cache_size=50, auto_reload=True)
searchpath是查找路径,它可以是一个路径字符串,也可以是多个路径的列表
from jinja2 import FileSystemLoader,Environment
env = Environment(loader=FileSystemLoader('/python_project/templates')) # 创建一个包加载器对象
template = env.get_template('bast.html') # 获取一个模板文件
template.render(name='daxin',age=18) # 渲染
模板语法
语法结构 | 注释 |
---|---|
{% %} | 控制结构,一般用来存放表达式 |
{{ }} | 变量取值,存放变量 |
{# #} | 存放注释 |
常用控制结构
- 判断语句
{% if daxin.safe %}
daxin is safe.
{% elif daxin.dead %}
daxin is dead
{% else %}
daxin is okay
{% endif %}
- for循环
- 迭代列表
<ul> {% for user in users %} <li>{{ user.username|title }}</li> {% endfor %} </ul>
- 迭代字典
<dl> {% for key, value in my_dict.iteritems() %} <dt>{{ key }}</dt> <dd>{{ value}}</dd> {% endfor %} </dl>
for循环中,jinja2提供了一些特殊的变量,用来获取当前的遍历状态
变量 | 描述 |
---|---|
loop.index | 当前迭代的索引(从1开始) |
loop.index0 | 当前迭代的索引(从0开始) |
loop.first | 是否是第一次迭代,返回bool |
loop.last | 是否是最后一次迭代,返回bool |
loop.length | 序列中的项目数量 |
loop.revindex | 到循环结束的次数(从1开始) |
loop.revindex0 | 到循环结束的次数(从0开始) |