From e3318658a5425995e79c444c7eb2bd88df1b604d Mon Sep 17 00:00:00 2001 From: Eugene Prikazchikov Date: Sat, 9 Dec 2017 20:40:57 +0300 Subject: [PATCH] Update Loader class to up-to-date template loader API load_template_sources is deprecated in Django 1.9 ad removed in Django2.0 see https://docs.djangoproject.com/en/1.9/releases/1.9/#template-loader-apis-have-changed --- dbtemplates/loader.py | 21 ++++++++++++++++----- dbtemplates/test_cases.py | 2 +- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/dbtemplates/loader.py b/dbtemplates/loader.py index 015d9a9..086a38b 100644 --- a/dbtemplates/loader.py +++ b/dbtemplates/loader.py @@ -1,6 +1,6 @@ from django.contrib.sites.models import Site from django.db import router -from django.template import TemplateDoesNotExist +from django.template import Origin, TemplateDoesNotExist from django.template.loaders.base import Loader as BaseLoader from dbtemplates.models import Template @@ -19,13 +19,24 @@ class Loader(BaseLoader): """ is_usable = True - def load_and_store_template(self, template_name, cache_key, site, **params): + def get_template_sources(self, template_name, template_dirs=None): + yield Origin( + name=template_name, + template_name=template_name, + loader=self, + ) + + def get_contents(self, origin): + content, _ = self._load_template_source(origin.template_name) + return content + + def _load_and_store_template(self, template_name, cache_key, site, **params): template = Template.objects.get(name__exact=template_name, **params) db = router.db_for_read(Template, instance=template) display_name = 'dbtemplates:%s:%s:%s' % (db, template_name, site.domain) return set_and_return(cache_key, template.content, display_name) - def load_template_source(self, template_name, template_dirs=None): + def _load_template_source(self, template_name, template_dirs=None): # The logic should work like this: # * Try to find the template in the cache. If found, return it. # * Now check the cache if a lookup for the given template @@ -61,11 +72,11 @@ class Loader(BaseLoader): # Not marked as not-found, move on... try: - return self.load_and_store_template(template_name, cache_key, + return self._load_and_store_template(template_name, cache_key, site, sites__in=[site.id]) except (Template.MultipleObjectsReturned, Template.DoesNotExist): try: - return self.load_and_store_template(template_name, cache_key, + return self._load_and_store_template(template_name, cache_key, site, sites__isnull=True) except (Template.MultipleObjectsReturned, Template.DoesNotExist): pass diff --git a/dbtemplates/test_cases.py b/dbtemplates/test_cases.py index b13f3f0..d864242 100644 --- a/dbtemplates/test_cases.py +++ b/dbtemplates/test_cases.py @@ -42,7 +42,7 @@ class DbTemplatesTestCase(TestCase): loader.template_source_loaders = None settings.TEMPLATE_LOADERS = self.old_template_loaders - def test_basiscs(self): + def test_basics(self): self.assertEqual(list(self.t1.sites.all()), [self.site1]) self.assertTrue("base" in self.t1.content) self.assertEqual(list(Template.objects.filter(sites=self.site1)),