0

我有 2 个模板模板,除了变量名不同之外,它们几乎相同:

模板 #1

{% for p in anArray %}
  {% if p.property1 = "abc" %}
    // some logic
  {% endif %}
{% endfor %}

模板#2

{% for a in aDifferentNameArray %}
  {% if a.property1 = "abc" %}
    // same logic as template 1
  {% endif %}
{% endfor %}

我认为如果我可以将它重构为模板并让模板#1 和#2 调用这个新模板会更干净

  {% if ??.property1 = "abc" %}
    // same logic as template 1
  {% endif %}

但问题出在模板 #1 中,变量p在模板 #2 中的位置,变量是a. 那么我该怎么做才能使用具有不同变量名的模板#1 和#2 调用新模板呢?

4

1 回答 1

0

这正是include标签的用例。使用此标记,您可以包含另一个模板的内容,也可以将您选择的上下文传递给它。

移动some logic到单独的模板。我们称该文件为some logic.stencil。在那里,无论您在哪里使用过p.propertyX,都应该将其更改为 just propertyX,因为您将p/a作为上下文。

一些逻辑.stencil:

{% if property1 = "abc" %}
    {# same logic as template 1, except all the "p." are deleted. #}
{% endif %}

在模板 #1 中,执行:

{% for p in anArray %}
    {% include "some logic.stencil" p %} {# passing "p" as the context #}
{% endfor %}

在模板 #2 中,执行:

{% for a in aDifferentNameArray %}
    {% include "some logic.stencil" a %} {# passing "a" as the context #}
{% endfor %}
于 2020-09-29T01:36:36.890 回答