Skip to main content

A bytecode compiling template loader for Django

Project description

A template loader that compiles Django templates into Python bytecode for improved performance.

https://api.travis-ci.org/mhallin/django-compiling-loader.svg?branch=master https://coveralls.io/repos/mhallin/django-compiling-loader/badge.svg?branch=master&service=github

This package exposes the compiling_loader.Loader template loader. This loader will compile the template syntax tree generated by Django into Python bytecode. If a tag can’t be generated, a fallback will be compiled, which just evaluates the template nodes. The fallback method means that this loader is compatible with the existing loaders, even if you have a lot of custom tags.

The compiler is modular and built around Python 3.4’s singledispatch function, meaning that it can easily be extended to support your own tags if you have expensive custom tags that would benefit from compilation.

The loader itself does not do any caching; it works together with Django’s built-in cached loader to avoid recompilation.

Usage

Install the django-compiling-loader Python package and set the TEMPLATE_LOADERS settings to the following value:

TEMPLATE_LOADERS = (
    ('django.template.loaders.cached.Loader', [
        ('compiling_loader.Loader', [
            'django.template.loaders.filesystem.Loader',
            'django.template.loaders.app_directories.Loader',
        ]),
    ]),
)

If you have other loaders, put them inside the compiling_loader.Loader list to ensure that the generated templates get compiled.

Compatibility

The loader has been tested with Django 1.7, and requires Python 3.4. When it comes to rendering compatibility, this project contains a fair number of test cases that compare the render output from the standard Django template evaluation and this compiler. So far, no incompatibilities have been found.

Performace

The test_proj/run_benchmarks.py script renders a small inheritance based template a large number of times, as well as a large both inheritance and include based template a few times. Below are some comparisons:

Template

Default

Compiled

Speedup

Small

0.21 ms

0.10 ms

2,1x

Large

125 ms

42 ms

3,0x

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

django-compiling-loader-0.0.1.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

django_compiling_loader-0.0.1-py3-none-any.whl (16.5 kB view details)

Uploaded Python 3

File details

Details for the file django-compiling-loader-0.0.1.tar.gz.

File metadata

File hashes

Hashes for django-compiling-loader-0.0.1.tar.gz
Algorithm Hash digest
SHA256 141fac2ff24e0139876ccd5db918ceee9228632e96dbefed49c131081392abef
MD5 f7ae922930ac4d751f2961ff20cdba0c
BLAKE2b-256 ccebf10e26543caf2fbd571eec07a5aa6a78aa85f182a0687a4ad5ebce7ab1b7

See more details on using hashes here.

File details

Details for the file django_compiling_loader-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_compiling_loader-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f55f5a47544edbe39b97e6a1d2681846abdbdb50d60531f2310935e20df948b5
MD5 dc894596cabf7b9259a0f9a776a7eea7
BLAKE2b-256 3cbab741f62817af66eca3ca14f01c3a267ec972470e12108507ae54f3c06528

See more details on using hashes here.

Supported by

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