Jinja2 template syntax

So far, only variable substitution has been used in Jinja2 template examples. This is the simplest and most understandable example of using templates. Syntax of Jinja templates is not limited to this.

In Jinja2 templates you can use :

  • variables
  • conditions (if/else)
  • loops (for)
  • filters - special built-in methods that allow to convert variables
  • tests - are used to check whether a variable matches a condition

In addition, Jinja supports inheritance between templates and also allows adding the contents of one template to another. This section covers only few possibilities. More information about Jinja2 templates can be found in documentation.

Note

All files used as examples in this subsection are in 3_template_syntax/ directory

Script cfg_gen.py will be used to generate templates.

from jinja2 import Environment, FileSystemLoader
import yaml
import sys
import os

# python cfg_gen.py templates/for.txt data_files/for.yml
template_dir, template = os.path.split(sys.argv[1])

vars_file = sys.argv[2]

env = Environment(
    loader=FileSystemLoader(template_dir),
    trim_blocks=True,
    lstrip_blocks=True)
template = env.get_template(template_file)

with open(vars_file) as f:
    vars_dict = yaml.safe_load(f)

print(template.render(vars_dict))

In order to see the result, you have to call the script and give it two arguments:

  • template
  • file with variables in YAML format

The result will be displayed on standard output stream.

Example of script run:

$ python cfg_gen.py templates/variables.txt data_files/vars.yml

Parameters trim_blocks and lstrip_blocks are described in the following subsection.