Skip to main content

Django - Jinja2 Templates Integration

Project description

Djtemps aims to ease Django - Jinja2 templates integration.


Simply add the following line to your imports::

from djtemps import render_to_response


from djtemps import render_to_string

and you're done. You can use both just the same as django's render_to_response,
such as

return render_to_response(filename, context, request_context, mimetype)

I simply use it as::

def view(request):
return render_to_response(template_name, locals())

This way all local variables including request context are passed to render_to_response
method. Implicit, yet handy when your scope is not much polluted.

Ifyou want to use additional filters, extensions or methods within your templates
add any of the following lines to your

JINJA_EXTENSIONS = ['name.of.your.extension.module1', 'name.of.your.extension.module2.' ... ]
JINJA_FILTERS = ['name.of.your.filter.method1', ...]
JINJA_METHODS = ['name.of.your.method', ...]

names must be strings, in module name format. such as::

JINJA_METHODS = ['djtemps.jinja_methods.enum', 'djtemps.jinja_methods.url_for',
'djtemps.jinja_methods.pagination', 'djtemps.jinja_methods.logger']

By the way djtemps provides the 4 method above by default, just state them in your settings file
as mentioned.

- enum is enumerate starting from 1 instead of 0, not really sure why i needed it
- url_for is identical to url_for in django templates . usage: {{ url_for ('url_name', args, kwargs) }}
- pagination is a simple pagination method. usage: {{ pagination(page_obj, request, num_items_per_page) }}
- logger is a logging instance enabling logging in templates. usage: {{ logger.debug('Debug message')}}

Methods are plain python functions. For filter and extension structure, you'll need
to have a look at the jinja2 documents.

There are two extensions in the package for now:
1. CsrfExtension providing csrf_token for using tokens in forms. Simply put it into your form structure, such as:

<form method="...>
{% csrf_token %}
and you're done. Credit goes to

2. Markdown2 extension for enabling markdown2 support in templates. For credits and usage details please refer to

If you want to enable translations in jinja2 templates:

- copy the management directory in this package to your apps' directory (your_project/app/management) as a whole
- add translation blocks to your jinja2 templates::

{% trans %} text to be translated {% endtrans %}

- issue the makemessages command as usual. If you use another extension for your jinja templates , declare it with
"-e extension" parameter. For example I use .jinja extension for my templates::

./ makemessages -l lang_code -e .jinja

Project details

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page