Example #1
0
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