Django: Switching to Jinja2?

DjangoDjango TemplatesJinja2

Django Problem Overview


I've got a couple small (500 or 600 lines of template code) Django sites, and I'd like to migrate them to using Jinja2… But I'd like to get some idea of how much work it will be. So, in general, about how much work is it to migrate a small Django site to Jinja2? And is it “worth it”?

Django Solutions


Solution 1 - Django

While it's just my own experience, I found converting from Django to Jinja2 to be worthwhile for the following reasons:

  1. The design and implementation of Jinja2 seemed more intuitive to me, both as a software developer and template designer;
  2. Jinja2 is more extensible (at least in the ways I've sought to extend my template engine);
  3. Jinja2 is more flexible in terms of permitting logic-code to be run (but it gives you enough rope to hang yourself with);
  4. Jinja2 is regarded as significantly faster (though I haven't done any benchmarks, this is always subject to debate depending on the tests used, and in any event largely irrelevant in the total wait time for a query that has to do DB lookups);
  5. Jinja2 gives significantly more helpful error output than Django (i.e. traces to the line number in the template where the error occurred). Edit: According to Dor's comment, Django gives helpful error messages that point to the line and context of a problem, much like Jinja2.

If you haven't had any trouble with Django's template engine, Jinja2's should feel relatively intuitive, if perhaps a bit more polished (or it did to me, at any rate). As well, I found the Coffin project well written and reasonably helpful when converting from Django to Jinja2 – both for its use, and as an example of how to extend Jinja2.

All that being said, Django's template engine is solid and quite capable for most tasks. I believe it's being improved in the next revision of Django, and there is quite a lot of effort to add to its capabilities by quite a number of dedicated developers. As a result there are no worries of it becoming unsupported in the near to medium-term future.

Again, that's just my experience, for what it's worth – I hope that's helpful.

Solution 2 - Django

There's also django-jinja. https://github.com/niwibe/django-jinja

New and nice project. http://niwinz.github.io/django-jinja/latest/

It claims to be a simple and nonobstructive jinja2 integration with Django.

Solution 3 - Django

From what you have said, it's may not be worth the trouble to migrate to Jinja2. There are filters in Django Templates which could help you do any math operations.

Regarding list operations, what exactly are you talking about? If you want some particular list operation to be supported in Template, than write a custom filter.

There are also some existing 3rd party math filters for Django.

If you think about it, it's by design that Django templates does not have too much of "programming constructs" in them. HTML templates should be such...

Solution 4 - Django

Two projects which are trying to integrate Jinja in Django with simple integration steps and nicely hooks with Django -

  1. Coffin
  2. Chouwa

I am integrating them right away to experiment if they work too with Django contrib apps like Django Admin. But I feel, it will be available for project apps and Django default template system will be used in internal apps like Admin.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDavid WoleverView Question on Stackoverflow
Solution 1 - DjangoBrian M. HuntView Answer on Stackoverflow
Solution 2 - DjangoArthur AlvimView Answer on Stackoverflow
Solution 3 - DjangoSrikar AppalarajuView Answer on Stackoverflow
Solution 4 - DjangoRavi KumarView Answer on Stackoverflow