32 lines
841 B
Python
32 lines
841 B
Python
import json
|
|
|
|
import jinja2
|
|
|
|
|
|
# The Jinja2 environment
|
|
_ENV = None
|
|
|
|
|
|
def env_init(force: bool = False):
|
|
"""
|
|
Initialize the Jinja2 environment.
|
|
:param force: If true, force reload the environment.
|
|
"""
|
|
global _ENV
|
|
if _ENV is None or force:
|
|
# Use json.dumps as finalizer in order to preserve complex data structures
|
|
_ENV = jinja2.Environment(finalize=json.dumps)
|
|
return _ENV
|
|
|
|
|
|
def render(template: str):
|
|
"""
|
|
Render the given string as a Jinja2 template.
|
|
:param template: The template string to render.
|
|
"""
|
|
# Make sure the Jinaj2 environment is initialized
|
|
env = env_init()
|
|
# Create a Jinja2 template from the input string
|
|
t = env.from_string(template)
|
|
# Render the template and turn the JSON dump back into complex data structures
|
|
return json.loads(t.render())
|