Skip to main content

A templatetag for easier integration of ICanHaz.js JavaScript templates with Django templates.

Quickstart

Dependencies

Tested with Django 1.3 through trunk, and Python 2.6 and 2.7. Almost certainly works with older versions of both.

Installation

Install from PyPI with pip:

pip install django-icanhaz

or get the in-development version:

pip install django-icanhaz==dev

Usage

  • Add "icanhaz" to your INSTALLED_APPS setting.

  • Set the ICANHAZ_DIRS setting to a list of full (absolute) path to directories where you will store your ICanHaz templates.

  • {% load icanhaz %} and use {% icanhaz "templatename" %} in your Django templates to safely embed the ICanHaz.js template at <ICANHAZ_DIRS-entry>/templatename.html into your Django template, automatically wrapped in <script id="templatename" type="text/html">, ready for ich.templatename({...}) in your JavaScript.

django-icanhaz does not bundle ICanHaz.js or provide any JavaScript utilities; it just helps you easily embed the templates in your HTML. Include ICanHaz.js in your project’s static assets and use it in your JS as usual.

Advanced usage

You can also bundle ICanHaz templates with Django reusable apps; by default django-icanhaz will look for templates in a jstemplates subdirectory of each app in INSTALLED_APPS. The app subdirectory name(s) to check can be configured via the ICANHAZ_APP_DIRNAMES setting, which defaults to ["jstemplates"].

The finding of templates can be fully controlled via the ICANHAZ_FINDERS setting, which is a list of dotted paths to finder classes. A finder class should be instantiable with no arguments, and have a find(name) method which returns the full absolute path to a template file, given a base-name.

By default, ICANHAZ_FINDERS contains "icanhaz.finders.FilesystemFinder" (which searches directories listed in ICANHAZ_DIRS) and "icanhaz.finders.AppFinder" (which searches subdirectories named in ICANHAZ_APP_DIRNAMES of each app in INSTALLED_APPS), in that order – thus templates found in ICANHAZ_DIRS take precedence over templates in apps.

Rationale

The collision between Django templates’ use of {{ and }} as template variable markers and ICanHaz.js’ use of same has spawned a variety of solutions. One solution simply replaces [[ and ]] with {{ and }} inside an icanhaz 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.2.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 ICANHAZ_DIRS. Thanks Eduard Iskandarov for report and patch.

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

Release files for django-icanhaz 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-icanhaz 0.2.1
File Size Uploaded
django-icanhaz-0.2.1.tar.gz 7.9 kB Details

Release files / django-icanhaz-0.2.1.tar.gz

Download URL django-icanhaz-0.2.1.tar.gz
Size 7.9 kB
Tags Source
SHA-256 checksum
How to use checksums
947de2503c9c03f22db4ebab22664ddba1a9cec67fed482596b348d8f4561536
BLAKE2b-256 checksum
How to use checksums
bc0f7d4e08a8e3cf47b5fc48160d91a5ab883381307d4c19819f52ac6e67ed56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.2.1 This release

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page