Login

Template class to test custom tag libraries

Author:
a.v.khodyrev
Posted:
July 18, 2009
Language:
Python
Version:
1.0
Tags:
templates
Score:
0 (after 0 ratings)

TestableTemplate behaves just like django.template.Template, but you can give it a list of template.Libraries to load before parsing the template. This is equivalent to adding a bunch of {% load %} tags to the beginning of your template string, but you can use custom tag libraries which do not belong to Django applications' templatetags packages.

This is occasionally useful in testing.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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='<Unknown Template>', 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() 

More like this

  1. "Partial Templates" - an alternative to "include" by vigrid 6 years, 2 months ago
  2. Partial templates, combine with and include by koblas 4 years, 11 months ago
  3. isoutc template filter by japerk 5 years, 11 months ago
  4. Safe template decorator by eternicode 2 years, 10 months ago
  5. Template range filter by zalun 6 years ago

Comments

Please login first before commenting.