Jinja2 Template rendering Engine

Jinja is a powerful template engine. One can define a wide range of templates and then render them by passing values through python program. Jinja template file is a plain text file which could have any extension such as html, rst or txt.

Variables and Filters

  • Variables can be modified by filters.

    • Filters are separated from vaariables by a pipe symbol (|)
    • Filters can have optional arguments in paranthesis
    • Multiple filters can be chained together
    • Jinja has several built-in features
    • You can also create your own filters.
    • Ansible offers several other filters which can be used with Jinja2.

Tests

  • Besides filters there are tests which can be used to test a variable againt a common expression.

    • To test a variable or expression we add is keyword along with the name of the tet after the variable.
    • Tests can accept arguments too. In which case, we use regular paranthesis to pass the arguments.
    • If there is only single argument, then the paranthesis can be dropped.

Controlling Whitespaces

  • Whitespace can be controlled in jinja2. There are two main ways to do that

    • Setting the trim_blocks and lstrip_blocks value in the python code
    from jinja2 import Environment, FileSystemLoader
    ENV = Environment(loader=FileSystemLoader('templates')) # Global variable
    ENV.trim_blocks = False
    ENV.lstrip_blocks = False
    
    • Setting the lstrip_block value explicitly in the template

Other Features

  • If the text actually requires special characters such as ‘{{‘ which are part of jinja2 syntax, they can be escaped. There is also help available for escaping HTML.
  • One of the powerful features of Jinja2 is Template inheritance. It can be used to simplify the templates by splitting them into multiple files.
  • Jinja offers several special variables inside control structures which makes writing templates convenient.
  • In order to not repeat yourself, Jinja2 allows you to define and use Macros
  • Jinja allows you to use a range of math, comparisons, logic and other operators in your templates.
  • Read the Template Designer Documentation for more details.