此类需求可能在利用一个模板定制新模板时遇到
默认情况下构造一个模板,只提供部分模板定义的变量值:
from Jinja2 import Template
template = Template('{{var1}} and {{var2}}')
print(template.render({'var1':'val1'}))
Jinja2会将未提供的值按照空字符串处理,输出如下:
val1 and
构造模板时指定undefined为StrictUndefined:
from Jinja2 import Template,StrictUndefined
template = Template('{{var1}} and {{var2}}',undefined=StrictUndefined)
print(template.render({'var1':'val1'}))
此时如未提供全部变量,会抛出异常:
jinja2.exceptions.UndefinedError:'var2' is undefined
构造模板时指定undefined为DebugUndefined:
from Jinja2 import Template,DebugUndefined
template = Template('{{var1}} and {{var2}}',undefined=DebugUndefined)
print(template.render({'var1':'val1'}))
则会将未提供的var2继续保持为变量:
val1 and {{ var2 }}
而且我们注意到,输出时jinja2还为其做了格式化,花括号和变量名之间的空格数量(0~n个)都会变成1个,并没有照原样输出。