Jinja2: Difference between revisions
Jump to navigation
Jump to search
Line 42: | Line 42: | ||
<syntaxhighlight lang='py'> | <syntaxhighlight lang='py'> | ||
template_as_text = '...' | template_as_text = '...' | ||
rtemplate = Environment( | rtemplate = Environment().from_string(template_as_text) | ||
data = rtemplate.render(variable_1='some value', variable_2='some other value') | data = rtemplate.render(variable_1='some value', variable_2='some other value') | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 03:58, 22 July 2022
External
- https://medium.com/knoldus/jinja2-template-the-modern-design-friendly-templating-engine-a9218fec96e5
- https://jinja.palletsprojects.com/en/latest/
- https://pypi.org/project/Jinja2/
Internal
TODO
What happens if a document containing a variable is rendered and the variable value is not provided?
Overview
Playground
Programming Model
Find out what the latest version is from https://pypi.org/project/Jinja2/
Then add this to your requirements.txt
jinja2 == 3.0.3
Once the virtual environment is updated, use it as such:
from pathlib import Path
from jinja2 import Environment, FileSystemLoader
template_dir = Path('...')
text = Environment(loader=FileSystemLoader(template_dir))\
.get_template('my-template.yaml.j2') \
.render(variable_1='some value', variable_2='some other value')
If the content is already loaded:
template_as_text = '...'
rtemplate = Environment().from_string(template_as_text)
data = rtemplate.render(variable_1='some value', variable_2='some other value')
Templating Language
Variable
raw content followed by {{ variable1 }}
Conditional
{%if some_var == "something" -%}
something
something else {{ var_1 }}
{% else %}
something completely different {{ var_2 }}
{%- endif %}
This works with empty strings too:
{%if some_var != "" -%}
my var is {{ some_var }}
To check whether a variable is defined or not defined:
{%if some_var is defined -%}
something
{%- endif %}
{%if some_var is not defined -%}
something else
{%- endif %}
Loops
my_list:
{%- for i in seq %}
- '{{ i }}'
{%- endfor %}
where seq
is a Python list:
seq = ['a', 'b']
text = Environment(loader=FileSystemLoader(template_dir)).get_template('my-template.yaml.j2').render(seq=seq)
Whitespace Management
A leading dash removes all whitespace (including new lines) between the last non space template character and it. A trailing dash removes all whitespace (including new lines) between it and the next non-whitespace character from the template.
{{-
-}}
{%-
-%}