Template Extensions
A template may extend the Cookieninja environment with custom Jinja2 extensions. It can add extra filters, tests, globals or even extend the parser.
To do so, a template author must specify the required extensions in cookiecutter.json as follows:
{
"project_slug": "Foobar",
"year": "{% now 'utc', '%Y' %}",
"_extensions": ["jinja2_time.TimeExtension"]
}
On invocation Cookieninja tries to import the extensions and add them to its environment respectively.
In the above example, Cookieninja provides the additional tag now, after installing the jinja2_time.TimeExtension and enabling it in cookiecutter.json.
Please note that Cookieninja will not install any dependencies on its own! As a user you need to make sure you have all the extensions installed, before running Cookieninja on a template that requires custom Jinja2 extensions.
By default Cookieninja includes the following extensions:
cookiecutter.extensions.JsonifyExtensioncookiecutter.extensions.RandomStringExtensioncookiecutter.extensions.SlugifyExtensioncookiecutter.extensions.TimeExtensioncookiecutter.extensions.UUIDExtension
Jsonify extension
The cookieninja.extensions.JsonifyExtension extension provides a jsonify filter in templates that converts a Python object to JSON:
{% {'a': True} | jsonify %}
Would output:
{"a": true}
Random string extension
The cookieninja.extensions.RandomStringExtension extension provides a random_ascii_string method in templates that generates a random fixed-length string, optionally with punctuation.
Generate a random n-size character string. Example for n=12:
{{ random_ascii_string(12) }}
Outputs:
bIIUczoNvswh
The second argument controls if punctuation and special characters !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ should be present in the result:
{{ random_ascii_string(12, punctuation=True) }}
Outputs:
fQupUkY}W!)!
Slugify extension
The cookieninja.extensions.SlugifyExtension extension provides a slugify filter in templates that converts string into its dashed (“slugified”) version:
{% "It's a random version" | slugify %}
Would output:
it-s-a-random-version
It is different from a mere replace of spaces since it also treats some special characters differently such as ' in the example above.
The function accepts all arguments that can be passed to the slugify function of python-slugify.
For example to change the output from it-s-a-random-version` to it_s_a_random_version, the separator parameter would be passed: slugify(separator='_').
UUID4 extension
The cookieninja.extensions.UUIDExtension extension provides a uuid4()
method in templates that generates a uuid4.
Generate a uuid4 string:
{{ uuid4() }}
Outputs:
83b5de62-31b4-4a1e-83fa-8c548de65a11