45

Is there a method for jinja2 to raise an exception when we pass a variable that is not present in the template?

PS: This is different(or opposite) from raising an exception when a variable is present in the template but it is not passed. For this I use "undefined=StrictUndefined"

rakesh
  • 451
  • 1
  • 4
  • 3

3 Answers3

50

When you load your jinja2.Environment, set the 'undefined' parameter to 'jinja2.StrictUndefined', e.g.:

env = jinja2.Environment(loader=<someloader>, undefined=jinja2.StrictUndefined)

You can catch and examine the render exception to see what was missing

EDIT It would help if I read your full question. :)

Jon McKenzie
  • 525
  • 4
  • 2
16

Maybe this could help you https://jinja.palletsprojects.com/en/2.11.x/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'])
dom1310df
  • 7
  • 2
  • 9
sacabuche
  • 2,781
  • 1
  • 27
  • 35
7

You can also do that:

from jinja2 import Template, StrictUndefined
Template('name: {{ name }} , city: {{ city }}',undefined=StrictUndefined).render(**{"name":"foo","city":"bar"})
Maoz Zadok
  • 4,871
  • 3
  • 33
  • 43
  • Excellent. Complements the `Environment` response. We use the one to discover the tokens but the other to actually render the content. – Dustin Oprea Feb 02 '22 at 04:54