A Django app that provides helper for compiling underscore templates to static files with i18 support.
This repo an project is forked from django-statici18n
github.com/zyegfryed/django-statici18n to tackle the problem of compiling of Underscore templates to single static js file.
The original code was generating static js files for translations.
This app is intended to make life easier when you want to work with your Underscore templates and translate them with Django default i18n module (no js gettext
). If you are using Underscore templates you can have project directory like:
<project_directory>/ ... locale/ +- en/ +- fr/ templates/ +- underscore/ | +- popup.html +- modals/ +- include/ +- main.html
and your popup.html
can look like:
<div> {% trans "Hello" %} <% username %> </div>
and you want to render it in something like Backbone:
PopupView = Backbone.View.extend({ template: _.template(popup_variable_name), });
to do this you need to compile your .html template to be available in js with popup_variable_name
. Moreover if you have multiple templates, you can bundle them int single js file and serve it via CDN or nginx ommiting django.
With django-static-underscore-i18n
you can do this by following. Declare dictionary mapping between html files and js variable names:
STATIC_UNDERSCORE_TEMPLATES = {'popup_variable_name': 'underscore/popup.html', ... , }
and run python manage.py compilejsunderscorei18n
which will bundle your html templates into one js file for each locale supporting i18 {% trans %}
tags.
Use your favorite Python packaging tool to install
django-staticunderscore-i18n
from PyPI, e.g.:pip install django-static-underscore-i18n
Add
'staticunderscorei18n'
to yourINSTALLED_APPS
setting:INSTALLED_APPS = [ # ... 'staticunderscorei18n', ]
Once you have edited your underscore .html templates or translated and compiled your messages, use the
compilejsunderscorei18n
management command:python manage.py compilejsunderscorei18n
Check that the
django.core.context_processors.i18n
context processor is added to yourTEMPLATE_CONTEXT_PROCESSORS
setting - should have already been set by Django. This is needed to resolve request.LANGUAGE_CODE variable during compilation phase:TEMPLATE_CONTEXT_PROCESSORS = ( # ... 'django.core.context_processors.i18n', )
and you should have FileSystemFinder
and AppDirectoriesFinder
to be available:
STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', )
- Edit your template(s) and insert .js files those were compiled. Good practice is to serve static files without django server (you can you nginx for that):
<script src="{{ STATIC_URL }}jsunderscorei18n/{{ LANGUAGE_CODE }}/underscore_templates.js"></script>
Note
By default, the generated catalogs are stored to STATIC_ROOT/jsunderscorei18n
.
You can modify the output path and more options by tweaking
django-staticunderscorei18n
settings.