Javascript 使用NUNJUCK或其他方法为嵌套变量创建模板解决方案

Javascript 使用NUNJUCK或其他方法为嵌套变量创建模板解决方案,javascript,npm,gulp,template-engine,nunjucks,Javascript,Npm,Gulp,Template Engine,Nunjucks,我刚刚开始使用gulp&Nunjuck进行模板制作(本例中为电子邮件) 我想解决调用module/partial并在每次处理时为属性分配不同值的问题 它最初看起来像for循环的作业,但不一定会在模板中按顺序调用该模块 在模块中,有分配给变量的属性。 我希望根据模块所用于的部分,以不同的方式解析这些变量 一个非常基本的例子是-在索引文件中,我有: {% block content %} <!-- logo start --> {% include genericMod %} &

我刚刚开始使用gulp&Nunjuck进行模板制作(本例中为电子邮件)

我想解决调用module/partial并在每次处理时为属性分配不同值的问题

它最初看起来像for循环的作业,但不一定会在模板中按顺序调用该模块

在模块中,有分配给变量的属性。 我希望根据模块所用于的部分,以不同的方式解析这些变量

一个非常基本的例子是-在索引文件中,我有:

{% block content %}


<!-- logo start -->

{% include genericMod %}

<!-- logo end -->


<!-- some other section start -->

{% include someOtherMod %}

<!-- some other section end -->


<!-- hero start -->

{% include genericMod %}

<!-- hero end -->


{% endblock %}
然后能够在每次调用模块时以某种方式将该密钥分配给该模块:

<!-- logo start —>

{% include genericMod "modKey": "logo" %}

<!-- logo end -->

显然,这只是一个假设性的解决方案,但是否有一种方法可以实现类似的效果

结果证明解决方案非常简单。在尝试使用“set”时,我将上下文变量的值分配给字符串而不是变量名

为了记录在案,这是有效的

{% set data = logo %} 
{% include oneIncludeFile %} 
{% set data = hero %} 
{% include otherIncludeFile %}
其中包含文件将引用,例如{data.alt}或{{data.href}

尽管宏可能是实现这一点的更好方法:

{% macro foo(data) %} 
<a href="{{ data.href }}"><img src="{{ data.src }}" alt="{{ data.alt }}" /></a> 
{% endmacro %}
{%macro-foo(数据)%}
{%endmacro%}
然后像
{{foo(logo)}}
{{foo(hero)}}
那样调用它来传递不同的数据集

完整的解释可以在这里找到:

<tr>

 <td class="full-width-image" align="{{logo.align}}" ><img src="{{logo.src}}" alt="{{logo.alt}}"/></td>

</tr>
<!-- hero start -->

{% include genericMod "modKey": "hero" %}

<!-- hero end -->
<tr>

 <td class="full-width-image" align="{{hero.align}}" ><img src="{{hero.src}}" alt="{{hero.alt}}"/></td>

</tr>
"logo": {
    "alt": "some logo alt text",
    "href": "http://www.someurl.com",
    "align": "left"
  },
 "hero": {
    "alt": "some hero alt text",
    "href": "http://www.someotherurl.com",
    "align": "centre"
  }
{% set data = logo %} 
{% include oneIncludeFile %} 
{% set data = hero %} 
{% include otherIncludeFile %}
{% macro foo(data) %} 
<a href="{{ data.href }}"><img src="{{ data.src }}" alt="{{ data.alt }}" /></a> 
{% endmacro %}