Skip to content

Instantly share code, notes, and snippets.

@ogonbat
Created July 10, 2012 20:23
Show Gist options
  • Save ogonbat/3085996 to your computer and use it in GitHub Desktop.
Save ogonbat/3085996 to your computer and use it in GitHub Desktop.
themes.py
from django.template.base import TemplateDoesNotExist
from django.template.loader import BaseLoader
from django.utils._os import safe_join
from django.conf import settings
from backend.models import Theme
__author__ = 'cingusoft'
class Loader(BaseLoader):
is_usable = True
def recur_template_folders(self,template_name, themes_selector, template_dirs):
tried =[]
for template_dir in template_dirs:
try:
filepath = safe_join(template_dir,themes_selector,template_name)
with open(filepath,'rb') as fp:
return (fp.read().decode(settings.FILE_CHARSET), filepath)
except UnicodeDecodeError:
raise
except ValueError:
continue
except IOError:
tried.append(filepath)
else:
if tried:
#first check if default folder is scanned
if themes_selector != "default":
return self.recur_template_folders(template_name,"default",template_dirs)
else:
error_msg = "Tried %s" % tried
raise TemplateDoesNotExist(error_msg)
def load_template_source(self, template_name, template_dirs=None):
tried = []
if not template_dirs:
if len(settings.TEMPLATE_DIRS) != 0:
template_dirs = settings.TEMPLATE_DIRS
else:
error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory."
raise TemplateDoesNotExist(error_msg)
try:
themes_db = Theme.objects.get(is_default=True)
themes_selector = themes_db.name
except Themes.DoesNotExist:
themes_selector = "default"
return self.recur_template_folders(template_name,themes_selector,template_dirs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment