Buildout recipe for making files out of Jinja2 templates
Pull request Compare This branch is 29 commits ahead, 7 commits behind torgeilo:master.
Latest commit 89a71f3 Oct 28, 2012 @brodul Added Travis picture <3 .
Failed to load latest commit information.
brodul Added support for dashed values if they are in the recipe part. Tnx p… Oct 26, 2012
AUTHORS Changelog and authors change. Oct 25, 2012



brodul.recipe.template is a fork of amplecode.recipe.template, a Buildout recipe for generating files using Jinja2 templates. The recipe configures a Jinja2 environment, by default relative to the Buildout directory, allowing templates to extend and include other templates relative to the environment.

Downloads are available from pypi:

Buildout Options

  • template-file or input (required): One or more Jinja2 template file paths.
  • target-file or output (required): One of more target file paths. The number of files must match the number of template files.
  • base-dir: Base directory of the Jinja2 environment. Template file paths are relative to this directory. Default is the Buildout directory.
  • target-executable: One or more boolean flags (yes|no|true|false|1|0) indicating the executability of the target files. If only one flag is given it is applied to all target files.
  • eggs: Reserved for a list of eggs, conveniently converted into a pkg_resources.WorkingSet when specified
  • jinja2_filters: custom filter functions separated by white-space

Additional options are simply forwarded to the templates, and options from all the other parts are made available through parts.<part-name>.<option-name> and parts[<part-name>][<option-name>].

Lists of Values

It is possible for a recipe option to contain one or more values, separated by whitespace. A split filter is available for when you want to iterate over the whitespace separated values in your Jinja2 template:

{% for cmd in cmds|split %}
   echo "{{ cmd }}"
{% endfor %}

Minimal Example

foo.txt is created from foo.txt.jinja2 without any extra options:

parts = foo

recipe = brodul.recipe.template
template-file = foo.txt.jinja2
target-file = foo.txt

Larger Example

foo.txt is created from myapp/foo.txt.jinja2, is created from myapp/, the second will be executable, and both templates can utilize the additional options specified:

parts = foo

recipe = brodul.recipe.template
base-dir = myapp
template-file =
input =
output =
project_name = Another Example
author = Me

dashed-value = borg
value = cash


{{['dashed-value'] }}
{{ }}
{{ author }}


{{ }} won't work, but you can access it as a dict key.

Dashed value in the same part

If there is a dashed-value in brodul.recipe.template part and you would like to reference it, use:


Custom filters

The filter function is located in the same directory as the buildout.cfg in a file. If you want to use more filters separate them with a white space.

parts = foo

recipe = brodul.recipe.template
input = foo.txt.jinja2
output = foo.txt
jinja2_filters =


See the CHANGELOG file


See the LICENSE file


Why this fork

  • there should be an input and output option in buildout (since the '-' in 'target-file' char is parsed by jinja2)
  • custom filters support