I recently found myself in the same boat, except I came from a mako background.
Mustache does not allow for template extension/inheritance but there are a few options available to you that I know of.
-
You could use partials:
{{>header}} Hello {{name}} {{>footer}}
-
You could inject template pre-processing functions into the context for each template that needs to inherit from some other page:
{{#extendBase}} Hello {{name}} {{/extendBase}}
Hash:
{ "name": "Walden", "extendBase": function() { return function(text) { return "<html><head></head>" + render(text) + "</body></html>" } } }
-
Prepend and append the desired HTML to the relevant pages in your controller.
-
Have a layout template ala:
{{>header}} {{{body}}} {{>footer}}
And render the body in your controller, passing that to the layout template as a variable named
body
. -
Implement template inheritance, pre-mustache, in your code that loads templates.
I wouldn’t, however, use the triple mustache because I don’t want unescaped HTML to be appearing anywhere, it’s just too risky in my opinion.
If someone else has a better solution to this problem I’d love to hear it as well, since I haven’t yet taken the plunge in any one of these directions.