The Mustache Extension provides output templating based on the Mustache Templating Language.


  • pystache (pip install pystache)


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 import foundation

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

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 Mustache template file in myapp/templates/my_template.mustache or /usr/lib/myapp/templates/my_template.mustache and then render a data dictionary with it:

app.render(some_data_dict, 'my_template.mustache')

Loading Partials

Mustache supports partials, or in other words template includes. These are also loaded by the output handler, but require a full file name. The partials will be loaded in the same way as the base templates

For example:


Inside base.mustache
{{> partial.mustache}}


Inside partial.mustache

Would output:

Inside base.mustache
Inside partial.mustache
class cement.ext.ext_mustache.MustacheOutputHandler(*args, **kw)

Bases: cement.core.output.TemplateOutputHandler

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

Note This extension has an external dependency on pystache. You must include pystache in your applications dependencies as Cement explicitly does not include external dependencies for optional extensions.

class Meta

Handler meta-data.


alias of cement.core.output.IOutput

overridable = False

Whether or not to include mustache as an available to choice to override the output_handler via command line options.

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

Take a data dictionary and render it using the given template file. Additional keyword arguments passed to stache.render().

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)