Django Jinja2 Integration

2.11.0 · active · verified Thu Apr 16

django-jinja integrates the Jinja2 templating language into Django projects, providing a comprehensive Jinja2 backend for Django's template system. This allows developers to leverage Jinja2's powerful features within their Django applications. The current version is 2.11.0, and the library maintains an active release cycle, regularly updating to support new Django and Python versions.

Common errors

Warnings

Install

Imports

Quickstart

To quickly set up django-jinja: 1. Add 'django_jinja' and your app 'myapp' to `INSTALLED_APPS`. 2. Configure `TEMPLATES` in `settings.py` to use `django_jinja.base.Jinja2` as a backend, ensuring `match_extension` (e.g., '.jinja') matches your template file names. 3. Create a simple view in `myapp/views.py` that renders a Jinja2 template. 4. Create a Jinja2 template (e.g., `myapp/templates/myapp/hello.jinja`). 5. Map a URL to your view in `project/urls.py`. This minimal setup allows Django to load and render Jinja2 templates via django-jinja.

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_jinja',
    'myapp',
]

TEMPLATES = [
    {
        "BACKEND": "django_jinja.base.Jinja2",
        "APP_DIRS": True,
        "OPTIONS": {
            "match_extension": ".jinja",
            "autoescape": True,
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
            "globals": {
                "static": "django.templatetags.static.static",
                "url": "django.urls.reverse",
            },
            "extensions": [
                "jinja2.ext.do",
                "jinja2.ext.loopcontrols",
                "jinja2.ext.with_",
                "jinja2.ext.i18n",
                "jinja2.ext.autoescape",
                "django_jinja.base.DefaultExtension",
            ]
        },
    },
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

# myapp/views.py
from django.shortcuts import render

def hello_world(request):
    return render(request, "myapp/hello.jinja", {"name": "World"})

# myapp/templates/myapp/hello.jinja
<!DOCTYPE html>
<html>
<head>
    <title>Jinja2 in Django</title>
</head>
<body>
    <h1>Hello {{ name }}!</h1>
    <p>This is a Jinja2 template.</p>
</body>
</html>

# project/urls.py
from django.contrib import admin
from django.urls import path
from myapp.views import hello_world

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello_world, name='hello_world'),
]

view raw JSON →