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.core.exceptions import ImproperlyConfigured
from django.db import models from django.db import models
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.template import loader
from django.utils.encoding import force_str from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework.compat import coreapi, coreschema, distinct from rest_framework.compat import coreapi, coreschema, distinct
from rest_framework.renderers import loader
from rest_framework.settings import api_settings 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 InvalidPage
from django.core.paginator import Paginator as DjangoPaginator from django.core.paginator import Paginator as DjangoPaginator
from django.template import loader
from django.utils.encoding import force_str from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework.compat import coreapi, coreschema from rest_framework.compat import coreapi, coreschema
from rest_framework.exceptions import NotFound from rest_framework.exceptions import NotFound
from rest_framework.renderers import loader
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
from rest_framework.utils.urls import remove_query_param, replace_query_param 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.exceptions import ImproperlyConfigured
from django.core.paginator import Page from django.core.paginator import Page
from django.http.multipartparser import parse_header 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.urls import NoReverseMatch
from django.utils.html import mark_safe from django.utils.html import mark_safe
@ -35,6 +35,23 @@ from rest_framework.utils.field_mapping import ClassLookupDict
def zero_as_none(value): def zero_as_none(value):
return None if value == 0 else 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: class BaseRenderer:
""" """

View File

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

View File

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

View File

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