Yet another mustache implementation.
Usage
import stache
from html import escape
template = stache.get_template('foo.html')
html = stache.render(template, {'title': 'my first website'}, escape)
template = stache.parse('{{#foo}}{{bar}}{{/foo}}')
output = stache.render(template, {'foo': True, 'bar': 'Hello world!'}, lambda x: x)
Supported features
-
variables:
{{foo}}
-
safe variables:
{{&foo}}
-
sections:
{{#foo}}{{bar}}{{/foo}}
-
inverted sections:
{{^foo}}{{bar}}{{/foo}}
-
partials:
{{>path/to/file.html}}
-
comments:
{{! ignore me }}
-
lambdas:
def highlight(nodes, context, escape): text = stache.render(nodes, context, lambda x: x) return pygments.highlight(text) template = stache.parse('{{#highlight}}{{code}}{{/highlight}}') output = stache.render(template, {'code': …, 'highlight': highlight}, escape)
-
.
to access the current context object:{{.}}
-
missing variables are treated as empty strings/falsy
-
context inheritance: you can access variables from the outer contexts (unless they are shadowed)
-
lines with standalone template tags are removed from the output
Not supported
- changing delimiters
.
to go down the context hierarchy:{{foo.bar}}
{{{foo}}}
for safe variables (use{{&foo}}
instead)- multi line comments
- partials are not indented