This tool is meant to be used as an extension to django-compressor
It precompiles handlebars.js templates specifically for ember.js
- platform independent
- no need to install node.js packages
- flexible template naming conventions
- inline handlebars in django templates
- 100% test coverage
- PEP 8 compliance
- semver compliance
Install with pip/easy_install from the pypi
pip install ember-compressor-compiler
or clone the latest source
git clone https://github.com/apmorton/ember-compressor-compiler.git
cd ember-compressor-compiler
python setup.py install
You must also install node.js or PyV8
The latest versions of node.js can be found here
Using this tool is as simple as installing it and adding it to the COMPRESS_PRECOMPILERS
django setting
COMPRESS_PRECOMPILERS = (
('text/x-handlebars', 'embercompressorcompiler.filter.EmberHandlebarsCompiler'),
)
Then, in your django templates you can embed handlebars templates like so
{% load staticfiles %}
{% load compress %}
{% compress js %}
<script type="text/x-handlebars" src="{% static 'app/templates/application.hbs' %}" ></script>
<script type="text/x-handlebars" data-template-name="index">
{{outlet}}
</script>
{% endcompress %}
Template names are determined in one of two ways
- the
data-template-name
attribute on thescript
tag in your django template - the
src
attribute on thescript
tag in your django template
When specified, the data-template-name
value is used verbatim
If not, the src
value is manipulated to give proper template names.
- the file extensions
.handlebars
and.hbs
are removed - everything before the parent directory
templates
is removed
<!-- results in template named 'application' -->
<script type="text/x-handlebars" src="{% static 'app/templates/application.hbs' %}" ></script>
<!-- results in template named 'example/index' -->
<script type="text/x-handlebars" src="{% static 'app/templates/example/index.handlebars' %}" ></script>
If you need to change the template naming behavior, you can subclass embercompressorcompiler.filter.EmberHandlebarsCompiler
from embercompressorcompiler.filter import EmberHandlebarsCompiler
class MyCompiler(EmberHandlebarsCompiler):
# override default parent directory
parent_dir = 'tpls'
# override default extensions
extensions = ['.tpl']
Then you register your own compiler subclass in COMPRESS_PRECOMPILERS
COMPRESS_PRECOMPILERS = (
('text/x-handlebars', 'myapp.MyCompiler'),
)