Added TemplateEngineLoader to support multiple template engines

This commit is contained in:
Bjoern Boschman 2020-07-31 09:31:32 +02:00
parent 559088463b
commit fb593df204
6 changed files with 26 additions and 7 deletions

View File

@ -8,11 +8,11 @@ from functools import reduce
from django.core.exceptions import ImproperlyConfigured
from django.db import models
from django.db.models.constants import LOOKUP_SEP
from django.template import loader
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
from rest_framework.compat import coreapi, coreschema, distinct
from rest_framework.renderers import loader
from rest_framework.settings import api_settings

View File

@ -8,12 +8,12 @@ from urllib import parse
from django.core.paginator import InvalidPage
from django.core.paginator import Paginator as DjangoPaginator
from django.template import loader
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
from rest_framework.compat import coreapi, coreschema
from rest_framework.exceptions import NotFound
from rest_framework.renderers import loader
from rest_framework.response import Response
from rest_framework.settings import api_settings
from rest_framework.utils.urls import remove_query_param, replace_query_param

View File

@ -15,7 +15,7 @@ from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.core.paginator import Page
from django.http.multipartparser import parse_header
from django.template import engines, loader
from django.template import engines, loader as django_template_loader
from django.urls import NoReverseMatch
from django.utils.html import mark_safe
@ -35,6 +35,23 @@ from rest_framework.utils.field_mapping import ClassLookupDict
def zero_as_none(value):
return None if value == 0 else value
class TemplateEngineLoader(object):
"""
In case a project uses multiple template engines
this class enhances the used `loader.get_template`
and `loader.select_template` by specifying the `NAME`
for the used template engine.
See also: https://docs.djangoproject.com/en/3.0/topics/templates/#configuration
"""
def __init__(self):
self.engine_name = api_settings.DEFAULT_TEMPLATE_ENGINE
def get_template(self, template_name):
return django_template_loader.get_template(template_name, using=self.engine_name)
def select_template(self, template_name_list, using=None):
return django_template_loader.select_template(template_name_list, using=self.engine_name)
loader = TemplateEngineLoader()
class BaseRenderer:
"""

View File

@ -61,6 +61,9 @@ DEFAULTS = {
},
'NUM_PROXIES': None,
# Custom template engine NAME
'DEFAULT_TEMPLATE_ENGINE': None
# Pagination
'PAGE_SIZE': None,

View File

@ -2,14 +2,13 @@ import re
from collections import OrderedDict
from django import template
from django.template import loader
from django.urls import NoReverseMatch, reverse
from django.utils.encoding import force_str, iri_to_uri
from django.utils.html import escape, format_html, smart_urlquote
from django.utils.safestring import SafeData, mark_safe
from rest_framework.compat import apply_markdown, pygments_highlight
from rest_framework.renderers import HTMLFormRenderer
from rest_framework.renderers import HTMLFormRenderer, loader
from rest_framework.utils.urls import replace_query_param
register = template.Library()

View File

@ -7,7 +7,6 @@ from django.conf.urls import include, url
from django.core.cache import cache
from django.db import models
from django.http.request import HttpRequest
from django.template import loader
from django.test import TestCase, override_settings
from django.utils.safestring import SafeText
from django.utils.translation import gettext_lazy as _
@ -17,7 +16,8 @@ from rest_framework.compat import coreapi
from rest_framework.decorators import action
from rest_framework.renderers import (
AdminRenderer, BaseRenderer, BrowsableAPIRenderer, DocumentationRenderer,
HTMLFormRenderer, JSONRenderer, SchemaJSRenderer, StaticHTMLRenderer
HTMLFormRenderer, JSONRenderer, SchemaJSRenderer, StaticHTMLRenderer,
loader
)
from rest_framework.request import Request
from rest_framework.response import Response