from django.template import Template, TemplateEncodingError, StringOrigin, Lexer, Parser from django.utils.encoding import smart_unicode class TestableTemplate(Template): def __init__(self, template_string, origin=None, name='', libraries=[]): try: template_string = smart_unicode(template_string) except UnicodeDecodeError: raise TemplateEncodingError("Templates can only be constructed from unicode or UTF-8 strings.") origin = StringOrigin(template_string) self.nodelist = my_compile_string(template_string, origin, libraries) self.name = name def my_compile_string(template_string, origin, libraries=[]): "Compiles template_string into NodeList ready for rendering" lexer = Lexer(template_string, origin) parser = Parser(lexer.tokenize()) for lib in libraries: parser.add_library(lib) return parser.parse()