Created
July 10, 2012 20:23
-
-
Save ogonbat/3085996 to your computer and use it in GitHub Desktop.
themes.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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