mirror of
https://github.com/jazzband/django-dbtemplates.git
synced 2026-03-16 22:20:28 +00:00
Refactored loader to be class based only.
This commit is contained in:
parent
a40204def7
commit
2804cd527f
1 changed files with 28 additions and 44 deletions
|
|
@ -1,14 +1,13 @@
|
|||
import warnings
|
||||
from django import VERSION
|
||||
from django.conf import settings
|
||||
from django.contrib.sites.models import Site
|
||||
from django.template import TemplateDoesNotExist
|
||||
|
||||
from dbtemplates.conf import settings
|
||||
from dbtemplates.models import Template
|
||||
from dbtemplates.utils import cache, get_cache_key
|
||||
from dbtemplates.utils.cache import cache, get_cache_key, set_and_return
|
||||
from django.template.loader import BaseLoader
|
||||
|
||||
|
||||
def load_template_source(template_name, template_dirs=None, annoy=True):
|
||||
class Loader(BaseLoader):
|
||||
"""
|
||||
A custom template loader to load templates from the database.
|
||||
|
||||
|
|
@ -17,43 +16,28 @@ def load_template_source(template_name, template_dirs=None, annoy=True):
|
|||
it falls back to query the database field ``name`` with the template path
|
||||
and ``sites`` with the current site.
|
||||
"""
|
||||
if VERSION[:2] >= (1, 2) and annoy:
|
||||
# For backward compatibility
|
||||
warnings.warn(
|
||||
"`dbtemplates.loader.load_template_source` is deprecated; "
|
||||
"use `dbtemplates.loader.Loader` instead.", DeprecationWarning)
|
||||
site = Site.objects.get_current()
|
||||
display_name = 'db:%s:%s:%s' % (settings.DATABASE_ENGINE,
|
||||
template_name, site.domain)
|
||||
cache_key = get_cache_key(template_name)
|
||||
if cache:
|
||||
try:
|
||||
backend_template = cache.get(cache_key)
|
||||
if backend_template:
|
||||
return backend_template, template_name
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
template = Template.on_site.filter(name__exact=template_name)[0]
|
||||
# Save in cache backend explicitly if manually deleted or invalidated
|
||||
is_usable = True
|
||||
|
||||
def load_template_source(self, template_name, template_dirs=None):
|
||||
site = Site.objects.get_current()
|
||||
display_name = 'dbtemplates:%s:%s:%s' % (settings.DATABASE_ENGINE,
|
||||
template_name, site.domain)
|
||||
cache_key = get_cache_key(template_name)
|
||||
if cache:
|
||||
cache.set(cache_key, template.content)
|
||||
return (template.content, display_name)
|
||||
except:
|
||||
pass
|
||||
raise TemplateDoesNotExist(template_name)
|
||||
load_template_source.is_usable = True
|
||||
|
||||
|
||||
if VERSION[:2] >= (1, 2):
|
||||
# providing a class based loader for Django >= 1.2, yay!
|
||||
from django.template.loader import BaseLoader
|
||||
|
||||
class Loader(BaseLoader):
|
||||
__doc__ = load_template_source.__doc__
|
||||
|
||||
is_usable = True
|
||||
|
||||
def load_template_source(self, template_name, template_dirs=None):
|
||||
return load_template_source(
|
||||
template_name, template_dirs, annoy=False)
|
||||
try:
|
||||
backend_template = cache.get(cache_key)
|
||||
if backend_template:
|
||||
return backend_template, template_name
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
template = Template.objects.get(name__exact=template_name)
|
||||
return set_and_return(template.content, display_name)
|
||||
except (Template.MultipleObjectsReturned, Template.DoesNotExist):
|
||||
try:
|
||||
template = Template.objects.get(
|
||||
name__exact=template_name, sites__in=[site.id])
|
||||
return set_and_return(template.content, display_name)
|
||||
except Template.DoesNotExist:
|
||||
pass
|
||||
raise TemplateDoesNotExist(template_name)
|
||||
|
|
|
|||
Loading…
Reference in a new issue