我同时使用 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 %}
将各个块的 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>
这里既可能是任意的 HTML 块$label
,$hint
也可能是在宏之外定义的多个字段。
这里推荐的方法是什么?