Liquid templates for Python, with some extra features.
Warning
This is a preview. Some features and the documentation are incomplete. You can preview the draft migration guide here.
Table of Contents
Install Python Liquid2 from PyPi using pip:
python -m pip install python-liquid2
Or Pipenv:
pipenv install python-liquid2
Or Poetry:
poetry add python-liquid2
- Documentation: https://jg-rp.github.io/python-liquid2/
- Change Log: https://github.com/jg-rp/python-liquid2/blob/main/CHANGES.md
- PyPi: https://pypi.org/project/python-liquid2/
- Source Code: https://github.com/jg-rp/python-liquid2
- Issue Tracker: https://github.com/jg-rp/python-liquid2/issues
Here's a very simple example that renders a template from a string of text with the package-level render()
function. The template has just one placeholder variable you
, which we've given the value "World"
.
from liquid2 import render
print(render("Hello, {{ you }}!", you="World"))
# Hello, World!
Often you'll want to render the same template several times with different variables. We can parse source text without immediately rendering it using the parse()
function. parse()
returns a Template
instance with a render()
method.
from liquid2 import parse
template = parse("Hello, {{ you }}!")
print(template.render(you="World")) # Hello, World!
print(template.render(you="Liquid")) # Hello, Liquid!
Both parse()
and render()
are convenience functions that use the default Liquid environment. For all but the simplest cases you'll want to configure an instance of Environment
, then load and render templates from that.
from liquid2 import CachingFileSystemLoader
from liquid2 import Environment
env = Environment(
auto_escape=True,
loader=CachingFileSystemLoader("./templates"),
)
Then, using env.from_string()
or env.get_template()
, we can create a Template
from a string or read from the file system, respectively.
# ... continued from above
template = env.from_string("Hello, {{ you }}!")
print(template.render(you="World")) # Hello, World!
# Try to load "./templates/index.html"
another_template = env.get_template("index.html")
data = {"some": {"thing": [1, 2, 3]}}
result = another_template.render(**data)
Unless you happen to have a relative folder called templates
with a file called index.html
within it, we would expect a TemplateNotFoundError
to be raised when running the example above.