--- contrib/python/Jinja2/py3/jinja2/__init__.py (index) +++ contrib/python/Jinja2/py3/jinja2/__init__.py (working tree) @@ -22,6 +22,7 @@ from .loaders import FunctionLoader from .loaders import ModuleLoader as ModuleLoader from .loaders import PackageLoader as PackageLoader from .loaders import PrefixLoader as PrefixLoader +from .loaders import ResourceLoader as ResourceLoader from .runtime import ChainableUndefined as ChainableUndefined from .runtime import DebugUndefined as DebugUndefined from .runtime import make_logging_undefined as make_logging_undefined --- contrib/python/Jinja2/py3/jinja2/loaders.py (index) +++ contrib/python/Jinja2/py3/jinja2/loaders.py (working tree) @@ -659,3 +659,17 @@ class ModuleLoader(BaseLoader): return environment.template_class.from_module_dict( environment, mod.__dict__, globals ) + + +class ResourceLoader(BaseLoader): + def __init__(self, prefix, module_loader): + self.prefix = prefix + self.module_loader = module_loader + + def get_source(self, environment, template): + if self.module_loader is None: + raise TemplateNotFound(template) + try: + return self.module_loader.get_data(os.path.join(self.prefix, template)).decode('utf-8'), None, None + except IOError: + raise TemplateNotFound(template)