定义宏文件/tmp/my_macro.jinja2
:
{% macro print_hello(i) -%}hello, {{ i }}{%- endmacro %}
在另外一个文件/tmp/main.jinja2
中使用宏:
{# 这样导入的宏代码无法访问上下文变量,如果需要访问加上 with context ,比如 {% import 'my_macro.jinja2' as MRO with context %} #}
{% import 'my_macro.jinja2' as MRO %}
{{ MRO.print_hello("Mary")}}
{{ MRO.print_hello("Mark")}}
进行渲染/tmp/learn_jinja2.py
:
from jinja2.loaders import FileSystemLoader
from jinja2 import Environment
p = '/tmp/main.jinja2'
with open(p, 'r') as f:
rtemplate = Environment(loader=FileSystemLoader("/tmp")).from_string(f.read())
data = rtemplate.render({})
print(data)
输出结果:
hello, Mary
hello, Mark