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

Handler meta-data.


alias of cement.core.output.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)