Can Mustache Templates do template extension?
I've proposed this to the specification for Mustache here:
https://github.com/mustache/spec/issues/38
Currently mustache.java, hogan.js and phly_mustache support template inheritance.
You could use variables containing HTML. A "triple mustache" like {{{variable}}}
will return unescaped HTML. It's not exactly the same as template extensions, but you could render frontpage-content.html and then put its output in a content
variable that gets passed to base.html.
(I added -content to the frontpage.html filename with the expectation that such a naming pattern will help keep the filenames manageable.)
Mustache doesn't do template extension.
If you really want template extension then you may want to use a library purpose built with this functionality for you language/framework of choice.
FYI, I'm using Node.js/Express, so I will probably end up using https://github.com/fat/stache
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.