A Django template tag for embedding Mustache.js templates safely.
Project description
A templatetag framework for easier integration of mustache.js JavaScript templates with Django templates. Inspired by ICanHaz.js, django-icanhaz, and jquery.mustache.
Quick Usage
(Read the full docs on Read the Docs)
Add "mustachejs" to your INSTALLED_APPS setting.
app/jstemplates/main.mustache:
<div> <p>This is {{ name }}'s template</p> </div>
app/templates/main.html:
{% load mustachejs %} <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script> <script src="{{ STATIC_URL }}mustache/js/mustache-0.3.0.js"></script> <script src="{{ STATIC_URL }}mustache/js/django.mustache.js"></script> </head> <body> <div id="dynamic-area"></div> {% mustachejs "main" %} <script> $(document).ready(function() { var $area = $('#dynamic-area') , template; template = Mustache.template('main'); $area.html(template.render()); }); </script> </body> </html>
Rationale (from django-icanhaz)
The collision between Django templates’ use of {{ and }} as template variable markers and mustache.js’ use of same has spawned a variety of solutions. One solution simply replaces [[ and ]] with {{ and }} inside an mustachejs template tag; another makes a valiant attempt to reconstruct verbatim text within a chunk of a Django template after it has already been mangled by the Django template tokenizer.
I prefer to keep my JavaScript templates in separate files in a dedicated directory anyway, to avoid confusion between server-side and client-side templating. So my contribution to the array of solutions is essentially just an “include” tag that avoids parsing the included file as a Django template (and for convenience, automatically wraps it in the script tag that ICanHaz.js expects to find it in).
Enjoy!
CHANGES
0.7.5
Have the regex finder respect the MUSTACHEJS_EXTS setting
Update normal file finders to use glob patterns
0.7.4
Fix i18n preprocessor for python 2.6 compatibility
0.7.3
Correctly escaped translated strings.
0.7.2
Changed search pattern to be non-greedy.
0.7.1
Handle translation strings with new lines.
0.7.0
Pulled in commit from django-icanhaz to load templates using regular expressions.
Added preprocessing framework, and a preprocessor for i18n.
Hijack the makemessages command to find js template messages as well.
0.6.0
Add dustjs tag to insert a script block to create a compiled dustjs template. Thanks to Gehan Gonsalkorale.
0.5.0
Add mustacheraw tag to insert just the raw text of a mustacehe template. Thanks to Greg Hinch.
Add mustacheich tag to insert a mustache script block as icanhaz expects.
0.4.1 (2012.01.09)
Fixed template reading to explicitly decode template file contents using Django’s FILE_CHARSET setting. Thanks Eduard Iskandarov.
Fixed template-finding failure with non-normalized directories in MUSTACHEJS_DIRS. Thanks Eduard Iskandarov for report and patch.
0.4.0
Add the MUSTACHEJS_EXTS configuration variable for specifying the extensions allowed for template files located by the FilesystemFinder (and, by extension, the AppFinder).
0.3.3
Add a package_data value to the setup call
0.3.2
Add the MANIFEST.in file itself as an entry in MANIFEST.in.
0.3.0
Change the name from django-icanhaz to django-mustachejs.
Remove dependency on ICanHaz.js. I like the library, but the maintainers were not responsive enough for now. Use Mustache.js straight, with a little bit of minimal sugar. Templates are rendered to straight Javascript.
0.2.0 (2011.06.26)
Made template-finding more flexible: ICANHAZ_DIR is now ICANHAZ_DIRS (a list); added ICANHAZ_FINDERS, ICANHAZ_APP_DIRNAMES, and finding of templates in installed apps.
0.1.0 (2011.06.22)
Initial release.
TODO
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.