我同时使用Jinja2和Nunjucks(取决于项目),但尚未弄清楚如何使用包含任意HTML 的多个块创建可重用元素。例如(伪代码):
{% 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 %}
传递相应的块&#39; HTML作为宏的常规参数(即字符串)似乎是不现实的。
一个不那么人为的例子可能是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>
此处$label
和$hint
可能是HTML的任意块 - 也许甚至可能存在多个字段,在宏外部定义。
这里推荐的方法是什么?
答案 0 :(得分:1)
{% 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 %}
答案 1 :(得分:0)
您可能会发现这对可重用的HTML组件非常有用:
https://github.com/mozilla/nunjucks/pull/277
示例:
{% include 'search-box.html.twig' with {placeholder: 'Search users'} %}