18

By default Flask renders empty values for undefined attributes in Jinja templates. I want to raise an error instead. How can I change this behavior in Flask?

Hello, {{ name }}! 
render_template('index.html') 
Hello, ! 

1 Answer 1

27

Change the Flask app's Jinja env's undefined class to be StrictUndefined.

from flask import Flask from jinja2 import StrictUndefined app = Flask(__name__) app.jinja_env.undefined = StrictUndefined 

If a template tries to use a variable that is undefined (except to test if it's undefined) it will raise an error.

Hello, {{ name }}! 
render_template('index.html') 
jinja2.exceptions.UndefinedError: 'name' is undefined 
Sign up to request clarification or add additional context in comments.

2 Comments

For those using jinja directly (rather than via Flask): You can pass StrictUndefined to the Environment constructor: Environment(loader=..., autoescape=..., undefined=StrictUndefined)
And here is how to check for (TL;DR: var is defined ): stackoverflow.com/questions/3842690/… - this works even if the variable is undefined and strict undefined in place.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.