1

我同时使用 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也可能是在宏之外定义的多个字段。

这里推荐的方法是什么?

4

2 回答 2

0

您可以使用atpl模板引擎的embed 标签。例子:

{% 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 %}
于 2014-12-18T08:46:46.200 回答
0

您可能会发现这对于可重用的 HTML 组件很有用:

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

例子:

{% include 'search-box.html.twig' with {placeholder: 'Search users'} %}
于 2014-09-13T14:06:36.940 回答