# Wrapper for loading templates from eggs via pkg_resources.resource_string. from __future__ import unicode_literals try: from pkg_resources import resource_string except ImportError: resource_string = None from django.conf import settings from django.template.base import TemplateDoesNotExist from django.template.loader import BaseLoader from django.utils import six class Loader(BaseLoader): is_usable = resource_string is not None def load_template_source(self, template_name, template_dirs=None): """ Loads templates from Python eggs via pkg_resource.resource_string. For every installed app, it tries to get the resource (app, template_name). """ if resource_string is not None: pkg_name = 'templates/' + template_name for app in settings.INSTALLED_APPS: try: resource = resource_string(app, pkg_name) except Exception: continue if not six.PY3: resource = resource.decode(settings.FILE_CHARSET) return (resource, 'egg:%s:%s' % (app, pkg_name)) raise TemplateDoesNotExist(template_name)