Home Archives Categories Tags Docs

Python jinja2 模版使用

发布时间: 更新时间: 总字数:399 阅读时间:1m 作者: 分享

总结 python jinja2 模版使用示例。

安装

pip install  jinja2

使用技巧

空行和空格剔除

例如:

{% if xxx %}  # 空行 1
something...
{% endif %}   # 空行 2
              # 空行 3
{% if xxx %}  # 空行 4
something...
{% endif %}   # 空行 5
              # 空行 6
{% if xxx %}  # 空行 7
something...
{% endif %}   # 空行 8

解决方法:

block中加入-符号,例如:

------
{%- if test -%}
{%- endif -%}

{%- if test %}
{% endif -%}

示例

示例一

  • 源码

    #!/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 = "{{ LANG }}"
    SHELL = "{{ 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 源码

    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

{% highlight html %}
{% raw %}
{% import ‘macro.j2’ as form %}

{{ form.input(‘username’) }}


{{ form.input(‘password’, type=‘password’) }}


Hello {{ firstname }} {{ lastname }}!
{% endraw %}
{% endhighlight %}

  • 宏定义文件 template/macro.j2

{% highlight html %}
{% raw %}
{% macro input(name, value=“, type=‘text’, size=20) -%}

{%- endmacro %}
{% endraw %}
{% endhighlight %}

运行 & 结果:

[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!

完毕。

相关文章
最近更新
最新评论
加载中...