#
# The main rendering function
#
+g_token_cache = {}
def render(template='', data={}, partials_path='.', partials_ext='mustache',
partials_dict={}, padding=0, def_ldel='{{', def_rdel='}}',
# But it does need to be a generator
tokens = (token for token in template)
else:
- # Otherwise make a generator
- tokens = tokenize(template, def_ldel, def_rdel)
+ if template in g_token_cache:
+ tokens = (token for token in g_token_cache[template])
+ else:
+ # Otherwise make a generator
+ tokens = tokenize(template, def_ldel, def_rdel)
output = unicode('', 'utf-8')
# Generate template text from tags
text = unicode('', 'utf-8')
+ tags = []
for tag in tokens:
if tag == ('end', key):
break
+ tags.append(tag)
tag_type, tag_key = tag
if tag_type == 'literal':
text += tag_key
'no escape': '&'
}[tag_type], tag_key, def_rdel)
+ g_token_cache[text] = tags
+
rend = scope(text, lambda template, data=None: render(template,
data={},
partials_path=partials_path,