总结 python jinja2 模版使用示例。

安装

pip install  jinja2

使用技巧

空行和空格剔除

例如:

   # 空行 2
              # 空行 3
   # 空行 5
              # 空行 6
   # 空行 8

解决方法:

block中加入-符号,例如:

------```



## 示例

### 示例一

- 源码

#!/usr/bin/env python

coding=utf-8

from future import print_function

import os import sys

from jinja2 import Template

def main(): if len(sys.argv) != 3: print(‘Usage: {} [input] [output]’.format(sys.argv[0])) sys.exit(1)

in_path = sys.argv[1]
out_path = sys.argv[2]

with open(in_path, 'r') as in_file, open(out_path, 'w') as out_file:
    tmle = Template(in_file.read())
    out_file.write(tmle.render(os.environ))

if name == ‘main’: main()


- 模版文件 abc.conf.j2

[test]

LANG = “” SHELL = “”


运行:

[root@xiexianbin_cn j2]# ./template.py abc.conf.j2 abc.conf


结果:

[root@xiexianbin_cn j2]# ll total 12 -rw-r–r– 1 root root 49 Jan 22 11:35 abc.conf -rw-r–r– 1 root root 51 Jan 22 11:35 abc.conf.j2 -rwxr-xr-x 1 root root 1113 Jan 22 10:59 template.py [root@xiexianbin_cn j2]# cat abc.conf [test]

LANG = “en_US.UTF-8” SHELL = “/bin/bash”



### 示例二

功能:使用jinja 宏(macro)定义函数

- python 源码

```python
import os
import jinja2


def render(tpl_path, context):
    path, filename = os.path.split(tpl_path)
    return jinja2.Environment(
        loader=jinja2.FileSystemLoader('./template')
    ).get_template(filename).render(context)

context = {
    'firstname': 'John',
    'lastname': 'Doe'
}
result = render('./template/my_tpl.html', context)

print(result)
  • 模版文件 template/my_tpl.html
  
{% import 'macro.j2' as form %}
<p>{{ form.input('username') }}</p>
<p>{{ form.input('password', type='password') }}</p>
Hello {{ firstname }} {{ lastname }}!
  
  • 宏定义文件 template/macro.j2
  
{% macro input(name, value='', type='text', size=20) -%}
    <input type="{{ type }}" name="{{ name }}" value="{{
        value|e }}" size="{{ size }}">
{%- endmacro %}
  

运行 & 结果:

[root@xiexianbin_cn jinja2_test]# python j.py 

<p><input type="text" name="username" value="" size="20"></p>
<p><input type="password" name="password" value="" size="20"></p>
Hello John Doe!

完毕。