Using Jinja 2 with FileSystem Templates

Install jinja

pip install jinja2

In your file import required stuff

from jinja2 import Environment, FileSystemLoader

Create a folder called templates and add a file called config.j2

{% for customer in customers %}
    set groups {{ customer['group'] }} interfaces {{ customer['interface'] }} unit {{ customer['unit'] }} {{ line }}
{% endfor %}

Create the environment

env = Environment(
    loader=FileSystemLoader('templates'),
    trim_blocks=True,
    lstrip_blocks=True
)

Get the template

template = env.get_template('config.j2')

Render the template with a context dict

print(template.render(customers=[
    {
        'group': 'lx-1',
        'interface': 'ae16',
        'unit': '556'
    },
    {
        'group': 'lx-2',
        'interface': 'ae16',
        'unit': '557'
    },
]))

Removing / Managing Indentation

We are concerned about 2 variables trim_blocks and lstrip_blocks:

  • trim_blocks: If this is set to True the first newline after a block is removed (block, not variable tag!). Defaults to False.
  • lstrip_blocks: If this is set to True leading spaces and tabs are stripped from the start of a line to a block. Defaults to False.

    env = Environment( loader=FileSystemLoader(‘templates’), trim_blocks=True, lstrip_blocks=True )

Source