使用Twig生成Markdown,如何在twig中缩进块?

Using Twig to generate Markdown, how to indent blocks in twig?

我使用 Twig 的时间很少,所以我可能错过了一个重要提示;如果这是一个微不足道的问题,请原谅我。

我正在使用带有 PHP 的 Twig 来生成降价文件。

我的 twig 文件包含一个或多个 {% for %}...{% endfor %} 块和一个 for 循环,一些 {% if %}...{% endif %} 和...我不能在我的 Twig 中做任何缩进,否则空格是也出现在我的输出中。

一个非常愚蠢的例子:https://twigfiddle.com/fb6nzq(使用Show raw result确保看到单词true之前的空格)。

如果我不缩进 {% if %}...{% endif %},我得到了正确的结果 (https://twigfiddle.com/fb6nzq/2),但我的模板中不再有块缩进。

在我真实世界的树枝文件中,我可以有多个 {% endif %} 如下所示,它变得不可读。

{% for (variable) %}
{% if (condition) %}
{% if (condition) %}
{% if (condition) %}
{% endif %}
{% endif %}
{% endif %}
{% endfor%}

所以...您知道是否有一个绝妙的技巧可以在您的代码中保留缩进而不影响输出?

所需的树枝模板:

{% for (variable) %}
   {% if (condition) %}
      {% if (condition) %}
         {% if (condition) %}
         {% endif %}
      {% endif %}
   {% endif %}
{% endfor%}

您可以在任何开始或结束的分支表达式上使用破折号 -,其中:

  • 结束表达式上的破折号会在左边做一个 trim。
    {% if true -%}
  • 开头表达式上的破折号会在右边做一个 trim
    {%- if true %}
  • 开始和结束表达式上的破折号会在两边做一个 trim
    {%- if true -%}

注意:这是作为一个PHPtrim,所以这意味着它将还有 trim 你的换行符!

这是一个例子:

{% for i in 1..5 %}
   {% if true %}
      {% if true %}
         {%- if  true %}   
foo
         {%- endif %}
      {%- endif %}
   {% endif %}
{% endfor %}

呈现:

foo
foo
foo
foo
foo

这里可以测试:https://twigfiddle.com/1awhzk

另请注意: 有一个 spaceless tag 可以实现这些事情。