Python Liquid is a Python engine for Liquid, the safe, customer-facing template language.
We follow Shopify/Liquid closely and test against the Golden Liquid test suite.
Table of Contents
Install Python Liquid using Pipenv:
$ pipenv install -u python-liquid
Or pip:
$ pip install python-liquid
Or from conda-forge:
$ conda install -c conda-forge python-liquid
- Documentation: https://jg-rp.github.io/liquid/
- Documentation for Python Liquid version 1.x: https://jg-rp.github.io/python-liquid-docs-archive/
- Change Log: https://github.com/jg-rp/liquid/blob/main/CHANGES.md
- PyPi: https://pypi.org/project/python-liquid/
- Source Code: https://github.com/jg-rp/liquid
- Issue Tracker: https://github.com/jg-rp/liquid/issues
- Python Liquid2: A new Python engine for Liquid with extra features.
- LiquidScript: A JavaScript engine for Liquid with a similar high-level API to Python Liquid.
This example 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 liquid 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 BoundTemplate
instance with a render()
method.
from liquid 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 liquid import CachingFileSystemLoader
from liquid import Environment
env = Environment(
autoescape=True,
loader=CachingFileSystemLoader("./templates"),
)
Then, using env.parse()
or env.get_template()
, we can create a BoundTemplate
from a string or read from the file system, respectively.
# ... continued from above
template = env.parse("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.
Please see Contributing to Python Liquid.