如果我们传入模板中不存在的变量,则在jinja中引发异常

rak*_*esh 25 jinja2

当我们传递模板中不存在的变量时,是否有一种方法让jinja2引发异常?

PS:当模板中存在变量但未传递变量时,这与引发异常不同(或相反).为此,我使用"undefined = StrictUndefined"

小智 27

加载jinja2.Environment时,将'undefined'参数设置为'jinja2.StrictUndefined',例如:

env = jinja2.Environment(loader=<someloader>, undefined=jinja2.StrictUndefined)
Run Code Online (Sandbox Code Playgroud)

您可以捕获并检查渲染异常以查看缺少的内容

编辑如果我阅读完整的问题,这将有所帮助.:)

  • 不是OP的答案,而是我正在寻找的东西(以及大多数用户正在寻找的东西,从赞成票来看)。 (2认同)

sac*_*che 14

也许这可以帮助你 http://jinja.pocoo.org/docs/api/#the-meta-api

>>> from jinja2 import Environment, meta
>>> env = Environment()
>>> ast = env.parse('{% set foo = 42 %}{{ bar + foo }}')
>>> meta.find_undeclared_variables(ast)
set(['bar'])
Run Code Online (Sandbox Code Playgroud)


Mao*_*dok 7

您也可以这样做:

from jinja2 import Template, StrictUndefined
Template('name: {{ name }} , city: {{ city }}',undefined=StrictUndefined).render(**{"name":"foo","city":"bar"})
Run Code Online (Sandbox Code Playgroud)