Skip to main content

Can Mustache Templates do template extension?


I'm new to Mustache.



Many templating languages (e.g., Django / Jinja ) will let you extend a "parent" template like so...



base.html




<html><head></head>
<body>
{% block content %}{% endblock %}
</body>
</html>



frontpage.html




{% extends "base.html" %}
{% block content %}<h1>Foobar!</h1>{% endblock %}



I'm aware of Mustache's partials (e.g., {{>content}} ), but those seem to be just includes .



Does template extension exist for Mustache? Or, failing that, is there at least some design pattern that effectively turns includes into template extension equivalents.


Source: Tips4allCCNA FINAL EXAM

Comments

  1. 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.

    ReplyDelete
  2. 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.)

    ReplyDelete
  3. If you're happy with a server-side only code, Nun is a Mustache-like templating system with extends functionality via its 'template overrides' feature - modelled on django. While it works, however, it is no longer maintained by its author.

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

CCNA 1 Final Exam 2011 latest (hot hot hot)

  Hi! I have been posted content of ccna1 final exam (latest and only question.) I will post the answer and insert image on sunday. If you care, please subscribe your email an become a first person have full test content. Subcribe now  Some question  have not content because this question have images content. So that can you wait for me? SUNDAY 1. A user sees the command prompt: Router(config-if)# . What task can be performed at this mode? Reload the device. Perform basic tests. Configure individual interfaces. Configure individual terminal lines. 2. Refer to the exhibit. Host A attempts to establish a TCP/IP session with host C. During this attempt, a frame was captured with the source MAC address 0050.7320.D632 and the destination MAC address 0030.8517.44C4. The packet inside the captured frame has an IP source address 192.168.7.5, and the destination IP address is 192.168.219.24. At which point in the network was this packet captured? leaving host A leaving ATL leaving...