Skip to main content

A Python engine for the Liquid template language.

Project description

A Python implementation of Liquid, the safe, customer-facing template language for flexible web apps.

Version Tests Coverage License Python versions PyPy versions
from liquid import Template

template = Template("Hello, {{ you }}!")
print(template.render(you="World"))  # "Hello, World!"
print(template.render(you="Liquid"))  # "Hello, Liquid!"

Installing

Install Python Liquid using Pipenv:

$ pipenv install python-liquid

Or pip:

$ python -m pip install -U python-liquid

Compatibility

We strive to be 100% compatible with the reference implementation of Liquid, written in Ruby. That is, given an equivalent render context, a template rendered with Python Liquid should produce the same output as when rendered with Ruby Liquid.

See the known issues page for details of known incompatibilities between Python Liquid and Ruby Liquid, and please help by raising an issue if you notice an incompatibility.

Benchmark

You can run the benchmark using make benchmark (or python -O performance.py if you don’t have make) from the root of the source tree. On my ropey desktop computer with a Ryzen 5 1500X, we get the following results.

Best of 5 rounds with 100 iterations per round and 60 ops per iteration (6000 ops per round).

lex template (not expressions): 1.3s (4727.35 ops/s, 78.79 i/s)
                 lex and parse: 6.4s (942.15 ops/s, 15.70 i/s)
                        render: 1.7s (3443.62 ops/s, 57.39 i/s)
         lex, parse and render: 8.2s (733.30 ops/s, 12.22 i/s)

And PyPy3.7 gives us a decent increase in performance.

Best of 5 rounds with 100 iterations per round and 60 ops per iteration (6000 ops per round).

lex template (not expressions): 0.58s (10421.14 ops/s, 173.69 i/s)
                 lex and parse: 2.9s (2036.33 ops/s, 33.94 i/s)
                        render: 1.1s (5644.80 ops/s, 94.08 i/s)
         lex, parse and render: 4.2s (1439.43 ops/s, 23.99 i/s)

On the same machine, running rake benchmark:run from the root of the reference implementation source tree gives us these results.

/usr/bin/ruby ./performance/benchmark.rb lax

Running benchmark for 10 seconds (with 5 seconds warmup).

Warming up --------------------------------------
             parse:     3.000  i/100ms
            render:     8.000  i/100ms
    parse & render:     2.000  i/100ms
Calculating -------------------------------------
             parse:     39.072  (± 0.0%) i/s -    393.000  in  10.058789s
            render:     86.995  (± 1.1%) i/s -    872.000  in  10.024951s
    parse & render:     26.139  (± 0.0%) i/s -    262.000  in  10.023365s

I’ve tried to match the benchmark workload to that of the reference implementation, so that we might compare results directly. The workload is meant to be representative of Shopify’s use case, although I wouldn’t be surprised if their usage has changed subtly since the benchmark fixture was designed.

Contributing

Please see Contributing to Python Liquid.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python-liquid-1.4.2.tar.gz (219.9 kB view details)

Uploaded Source

Built Distribution

python_liquid-1.4.2-py3-none-any.whl (158.6 kB view details)

Uploaded Python 3

File details

Details for the file python-liquid-1.4.2.tar.gz.

File metadata

  • Download URL: python-liquid-1.4.2.tar.gz
  • Upload date:
  • Size: 219.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.5

File hashes

Hashes for python-liquid-1.4.2.tar.gz
Algorithm Hash digest
SHA256 1124918fab2ae7a50a24b49c9c8060ba55a162a8e628a5f5349f76205a1a8800
MD5 6fde054747a0946c64cb07278536f68f
BLAKE2b-256 a3fb1e8038cdc033e78df3c5737b2d050d7f647f03be5aed80e62e407cf4def5

See more details on using hashes here.

File details

Details for the file python_liquid-1.4.2-py3-none-any.whl.

File metadata

File hashes

Hashes for python_liquid-1.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 dd86591a370c7d35bf35feacc9482625d85cbc923f184bf72c4f6d583babaaa9
MD5 141f2887c762aa2b7d710fa54e18dc2e
BLAKE2b-256 42fc562399e33c951d807d28a9db0446c4c5547f9cb8b5dc61d3458de8f2f1e7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page