The Jinja2 Extension module provides output templating based on the Jinja2 Templating Language.


  • Jinja2 (pip install Jinja2)


To prepend a directory to the template_dirs list defined by the application/developer, an end-user can add the configuration option template_dir to their application configuration file under the main config section:

template_dir = /path/to/my/templates


from cement.core.foundation import CementApp

class MyApp(CementApp):
    class Meta:
        label = 'myapp'
        extensions = ['jinja2']
        output_handler = 'jinja2'
        template_module = 'myapp.templates'
        template_dirs = [

with MyApp() as app:

    # create some data
    data = dict(foo='bar')

    # render the data to STDOUT (default) via a template
    app.render(data, 'my_template.jinja2')

Note that the above template_module and template_dirs are the auto-defined defaults but are added here for clarity. From here, you would then put a Jinja2 template file in myapp/templates/my_template.jinja2 or /usr/lib/myapp/templates/my_template.jinja2.

class cement.ext.ext_jinja2.Jinja2OutputHandler(*args, **kw)

Bases: cement.core.output.TemplateOutputHandler

This class implements the IOutput interface. It provides text output from template and uses the Jinja2 Templating Language. Please see the developer documentation on Output Handling.

class Meta

Bases: object

Handler meta-data.


alias of IOutput

render(data_dict, template=None, **kw)

Take a data dictionary and render it using the given template file. Additional keyword arguments are ignored.

Required Arguments:

  • data_dict – The data dictionary to render.
  • template – The path to the template, after the template_module or template_dirs prefix as defined in the application.

str (the rendered template text)