def get_template_env(theme=None): """ Creates and return the templates environment for multiple sources. """ # Initializes the current environment custom_loaders = [] if settings.TEMPLATE_LOADERS: def import_and_get_loader(s): try: path, loader_name = s.rsplit(".", 1) except ValueError: raise ImproperlyConfigured("Invalid TEMPLATE_LOADER '%s'." % s) try: mod = import_anything(path) except ImportError: raise ImproperlyConfigured("Module '%s' wasn't found." % path) try: loader = getattr(mod, loader_name) except AttributeError: raise ImproperlyConfigured("Loader '%s' not found." % loader_name) return loader() custom_loaders = [import_and_get_loader(loader) for loader in settings.TEMPLATE_LOADERS] loaders = reduce(lambda a, b: a + b, get_template_loaders.send()) loader = ChoiceLoader(custom_loaders + loaders) template_env = Environment(loader=loader, extensions=settings.TEMPLATE_EXTENSIONS) template_env.theme = theme # Loads template filters for path in settings.TEMPLATE_FILTERS: mod = import_anything(path) for attr in dir(mod): item = getattr(mod, attr) if getattr(item, "environmentfilter", False): template_env.filters[attr] = item return template_env