(jinja2)= # Jinja2 template support Wagtail supports Jinja2 templating for all front end features. More information on each of the template tags below can be found in the [](writing_templates) documentation. ## Configuring Django Django needs to be configured to support Jinja2 templates. As the Wagtail admin is written using standard Django templates, Django has to be configured to use **both** templating engines. Add the Jinja2 template backend configuration to the `TEMPLATES` setting for your app as shown here: ```python TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", # ... the rest of the existing Django template configuration ... }, { 'BACKEND': 'django.template.backends.jinja2.Jinja2', 'APP_DIRS': True, 'OPTIONS': { 'extensions': [ 'wagtail.jinja2tags.core', 'wagtail.admin.jinja2tags.userbar', 'wagtail.images.jinja2tags.images', ], }, } ] ``` Jinja templates must be placed in a `jinja2/` directory in your app. For example, the standard template location for an `EventPage` model in an `events` app would be `events/jinja2/events/event_page.html`. By default, the Jinja environment does not have any Django functions or filters. The Django documentation has more information on {class}`django.template.backends.jinja2.Jinja2` (configuring Jinja for Django). ## `self` in templates In Django templates, `self` can be used to refer to the current page, stream block, or field panel. In Jinja, `self` is reserved for internal use. When writing Jinja templates, use `page` to refer to pages, `value` for stream blocks, and `field_panel` for field panels. ## Template tags, functions & filters ### `fullpageurl()` Generate an absolute URL (`http://example.com/foo/bar/`) for a Page instance: ```html+jinja ``` See [](fullpageurl_tag) for more information. ### `pageurl()` Generate a URL (`/foo/bar/`) for a Page instance: ```html+jinja More information ``` See [](pageurl_tag) for more information ### `slugurl()` Generate a URL for a Page with a slug: ```html+jinja About us ``` See [](slugurl_tag) for more information ### `image()` Resize an image, and render an `` tag: ```html+jinja {{ image(page.header_image, "fill-1024x200", class="header-image") }} ``` Or resize an image and retrieve the resized image object (rendition) for more bespoke use: ```html+jinja {% set background=image(page.background_image, "max-1024x1024") %}
``` See [](image_tag) for more information ### `srcset_image()` Resize an image, and render an `` tag including `srcset` with multiple sizes. Browsers will select the most appropriate image to load based on [responsive image rules](https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images). The [`sizes`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#sizes) attribute is essential unless you store the output of `srcset_image` for later use. ```html+jinja {{ srcset_image(page.photo, "width-{400,800}", sizes="(max-width: 600px) 400px, 80vw") }} ``` This outputs: ```html ``` Or resize an image and retrieve the renditions for more bespoke use: ```html+jinja {% set bg=srcset_image(page.background_image, "max-{512x512,1024x1024}") %} ``` ### `picture()` Resize or convert an image, rendering a `