from django.template import (
    Context,
    Template as DjangoTemplate,
    TemplateSyntaxError as DjangoTemplateSyntaxError,
    VariableDoesNotExist,
)

from . import registry

MAX_CACHE = 100
django_cache = {}


def compile_template(code):
    if code in django_cache:
        return django_cache[code]

    # If this works for re.compile, it works for us too.
    if len(django_cache) > MAX_CACHE:
        django_cache.clear()

    t = django_cache[code] = DjangoTemplate(code)
    return t


@registry.function
def render_django(template, **context):
    try:
        return compile_template(template).render(Context(context))
    except (VariableDoesNotExist, DjangoTemplateSyntaxError):
        return "Error rendering: %r" % template
