Search code examples
pythonflaskjinja2

Pass variables to all Jinja2 templates with Flask


I have a table in the navigation system of my webapp that will be populated with up-to-date information each time a page is rendered. How could I avoid putting the following code in each view?

def myview():
    mydict = code_to_generate_dict() 
    return render_template('main_page.html',mydict=mydict)

mydict is used to populate the table. The table will show up on each page


Solution

  • You can use Flask's Context Processors to inject globals into your jinja templates

    Here is an example:

    @app.context_processor
    def inject_dict_for_all_templates():
        return dict(mydict=code_to_generate_dict())
    

    To inject new variables automatically into the context of a template, context processors exist in Flask. Context processors run before the template is rendered and have the ability to inject new values into the template context. A context processor is a function that returns a dictionary. The keys and values of this dictionary are then merged with the template context, for all templates in the app: