2014-07-23 4 views
1

j'utiliser à la fois Jinja2 et Nunjucks (selon le projet), mais doivent encore comprendre comment créer des éléments réutilisables avec multiples blocs contenant HTML arbitraire. Par exemple (pseudo-code):plusieurs blocs arbitraires dans les macros jinja2

{% macro item(class) %} 
    <article class="{{ class }}"> 
     <h3>{{ caller(1) }}</h3> 
     <p>{{ caller(2) }}</p> 
    </article> 
{% endmacro %} 

{% call item %} 
    Hello <abbr title="...">world</abbr>! 
    {% ---- %} 
    lorem <em>ipsum</em> dolor <strong>sit</strong> amet 
{% endcall %} 

Passer le code HTML de blocs respectifs comme arguments réguliers (par exemple des chaînes) à la macro semble irréaliste.

Une des formes moins peut-être par exemple artificiel de style Bootstrap:

<div class="form-group"> 
    <label for="{{ id }}" class="control-label">$label</label> 
    <input type="{{ type }}" id="{{ id }}"> 
    <p class="help-block">$hint</p> 
</div> 

ici à la fois $label et $hint pourrait être des blocs arbitraires de HTML - peut-être il pourrait même être plusieurs champs, définis en dehors de la macro.

Quelle est l'approche recommandée ici?

+0

Il n'est pas clair pour moi ce que vous voulez réaliser. Qu'est-ce que vous voulez obtenir, et à quoi devrait ressembler idéalement le code pour l'obtenir? – Julian

Répondre

0

Vous pourriez trouver ce utile pour les composants HTML réutilisables:

https://github.com/mozilla/nunjucks/pull/277 

Exemple:

{% include 'search-box.html.twig' with {placeholder: 'Search users'} %} 
1

Vous pouvez utiliser embed tag de atpl moteur de template. Exemple:

{% embed "teasers_skeleton.twig" %} 
    {# These blocks are defined in "teasers_skeleton.twig" #} 
    {# and we override them right here:     #} 
    {% block label %} 
     Some content for the label box 
    {% endblock %} 
    {% block hint %} 
     Some content for the hint box 
    {% endblock %} 
{% endembed %} 
+0

Cela ressemble à ce que je veux - je ne suis pas sûr de pouvoir facilement transférer mes projets Nunjucks existants à atpl; ça vaut vraiment le coup d'essayer. Bien sûr, cela ne m'aidera pas avec le Jinja2 de Python ... – AnC