60 votes

Les modèles de moustache peuvent-ils créer une extension de modèle?

Je suis nouveau à Moustache.

De nombreux templates langues (par exemple, Django / Jinja) qui vous permettra de prolonger un "parent" modèle " comme si...

base.html

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

frontpage.html

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

rendu frontpage.html

<html><head></head>
    <body>
    <h1>Foobar!</h1>
    </body>
</html>

Je suis conscient de la Moustache de partiels (par exemple, {{>content}}), mais ceux qui semblent être tout inclut.

N'extension de modèle existe pas de Moustache? Ou, à défaut, est-il au moins certains modèle de conception qui devient comprend en extension de modèle équivalent.

65voto

Walden Points 388

J'ai récemment trouvé moi-même dans le même bateau, sauf si je suis venu d'un mako arrière-plan.

Moustache ne permet pas pour l'extension de modèle/l'héritage, mais il existe quelques options disponibles pour vous, que je sache.

  1. Vous pouvez utiliser des partiels:

    {{>header}}
        Hello {{name}}
    {{>footer}}
    
  2. Vous pourrait injecter modèle de pré-traitement des fonctions dans le contexte pour chaque modèle qui doit hériter d'une autre page:

    {{#extendBase}}      
        Hello {{name}}
    {{/extendBase}} 
    

    Hash:

    {
       "name": "Walden",
       "extendBase": function() {
           return function(text) {
               return "<html><head></head>" + render(text) + "</body></html>"
           }
       }
    }
    
  3. Ajouter et ajouter le souhaitées HTML pour les pages correspondantes dans votre contrôleur.

  4. Avoir un modèle de mise en page ala:

    {{>header}}
        {{{body}}}
    {{>footer}}
    

    Et de rendre le corps dans votre contrôleur, en passant, que le modèle de mise en page comme une variable nommée body.

  5. Mettre en œuvre l'héritage de template, pré-moustache, dans votre code qui charge les modèles.

Je ne voudrais pas, cependant, utiliser le triple moustache parce que je ne veux pas non échappés HTML apparaissant n'importe où, c'est tout simplement trop risqué à mon avis.

Si quelqu'un a une meilleure solution à ce problème, je serais ravi de l'entendre ainsi, puisque je n'ai pas encore pris le plongeon dans l'une de ces directions.

12voto

Sam Pullara Points 452

J'ai proposé ceci à la spécification de Moustache ici:

https://github.com/mustache/spec/issues/38

Actuellement, moustache.java, hogan.js et phly_mustache prennent en charge l'héritage de modèle.

7voto

Nick Points 149

Tu veux des Nunjucks !
L'introduction de l'auteur explique pourquoi.
Toutes les autres solutions pour l'héritage sont mauvaises.
Il s’agit essentiellement du style de gabarit Django (vraiment jinja2), avec un bel héritage.
C'est très nouveau mais ça a l'air génial.

3voto

Chris W. Points 7182

Moustache ne fait pas d'extension de modèle.

Si vous voulez vraiment une extension de modèle, vous pouvez utiliser une bibliothèque construite avec cette fonctionnalité pour votre langage / framework de choix.


Pour votre information, j'utilise Node.js / Express, je vais donc probablement utiliser https://github.com/fat/stache

3voto

Kurt McKee Points 904

Vous pouvez utiliser des variables contenant du HTML. Un "triple moustache" comme {{{variable}}} sera de retour sans échappement HTML. Ce n'est pas exactement le même que le modèle d'extensions, mais vous pourrait rendre frontpage-content.html et puis mettre sa production en content variable qui est passée à base.html.

(J'ai ajouté de contenu pour la frontpage.html nom de fichier avec l'espoir qu'un tel modèle de nommage aidera à garder les noms de fichiers gérable.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X