Skip to content

Add native Jinja2 extension for DRF template rendering (#4084) - #9999

Open
M97Chahboun wants to merge 5 commits into
encode:mainfrom
M97Chahboun:add-jinja2-support
Open

Add native Jinja2 extension for DRF template rendering (#4084)#9999
M97Chahboun wants to merge 5 commits into
encode:mainfrom
M97Chahboun:add-jinja2-support

Conversation

@M97Chahboun

Copy link
Copy Markdown

Closes #4084

Summary

This PR adds native Jinja2 support for DRF's template rendering tags (render_form and render_field).

Previously, these tags only worked with Django's default template engine. When a project was configured to use the Jinja2 backend, attempting to use these tags resulted in TemplateSyntaxError or missing tag exceptions.

To resolve this without introducing third-party dependencies (like django-jinja), this PR introduces a new native Jinja2 extension: rest_framework.jinja2.DRFExtension.

Developers can now seamlessly register this extension in their Jinja2 environment to expose the render_form and render_field globals, matching the behavior provided for Django templates.

@auvipy
auvipy self-requested a review July 21, 2026 18:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces first-party Jinja2 support for DRF’s template-based form rendering helpers by adding a Jinja2 extension that exposes render_form and render_field as globals, plus tests to validate the integration.

Changes:

  • Added rest_framework.jinja2.DRFExtension to register render_form / render_field in a Jinja2 environment.
  • Added new pytest coverage for using these globals in Jinja2 templates.
  • Added jinja2>=3.0 to optional dependencies.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
rest_framework/jinja2.py Adds the new Jinja2 extension that exposes DRF form/field rendering helpers.
tests/test_jinja2_templates.py Adds tests validating Jinja2 usage of render_form / render_field.
pyproject.toml Adds Jinja2 as an optional dependency to support the new integration.
Suppressed comments (2)

rest_framework/jinja2.py:18

  • render_form should return a Jinja2-safe string (Markup) and should pass style in the same shape that HTMLFormRenderer.render() expects (top-level style). The current implementation passes an unused serializer key and returns an unmarked string.
    def render_form(self, serializer, style=None):
        """Render a complete HTML form for the given serializer."""
        renderer = HTMLFormRenderer()
        return renderer.render(
            serializer.data,

rest_framework/jinja2.py:25

  • render_field should also return Markup so the HTML isn’t escaped by Jinja2 autoescape. Also, for parity with the existing Django template tag, consider honoring style['renderer'] when provided (so callers can reuse the renderer instance populated by form rendering).
    def render_field(self, field, style=None):
        """Render an individual HTML field."""
        renderer = HTMLFormRenderer()
        return renderer.render_field(field, style or {})

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread tests/test_jinja2_templates.py Outdated
Comment thread rest_framework/jinja2.py
Comment on lines +1 to +3
from jinja2.ext import Extension

from rest_framework.renderers import HTMLFormRenderer

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@M97Chahboun can you please cross check this and other suggestions?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK I will check it 👍🏼

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve Jinja2 support in DRF

3 participants