Source code for baguette.rendering

import typing

import jinja2

from .types import FilePath

_renderer = None


[docs]class Renderer: def __init__( self, templates_directory: typing.Union[ FilePath, typing.List[FilePath] ] = "templates", ): self.env = jinja2.Environment( loader=jinja2.FileSystemLoader(templates_directory), enable_async=True, )
[docs] async def render(self, template_name, *args, **kwargs): template: jinja2.Template = self.env.get_template(template_name) return await template.render_async(*args, **kwargs)
[docs]def init( templates_directory: typing.Union[ FilePath, typing.List[FilePath] ] = "templates" ): global _renderer _renderer = Renderer(templates_directory) return _renderer
[docs]async def render(template_name, *args, **kwargs): if _renderer is None: init(kwargs.pop("templates_directory", "templates")) return await _renderer.render(template_name, *args, **kwargs)