jinja2:如何正确格式化递归宏

时间:2016-10-26 22:23:42

标签: recursion macros jinja2

我有一个嵌套结构和一个递归宏来呈现它。但是在所有结束标记之前有一个额外的空行。如何删除空行以便呈现一个连续的块?

数据的形式如此

name='...'
list
  a
  a
  b
  name='...'
  list
    b
    b
  a

模板就像这样

{% macro list(item) -%}
  <ul name="{{ item.name }}">
  {% for item in item.list -%}
    {% if item.a -%}
      <li a="{{ item.a }}"/>
    {% elif item.b -%}
      <li b="{{ item.a }}">
    {% item.name -%}
      {{- list(item) }}
    {% endif -%}
  {%- endfor %}
  </ul>
{% endmacro -%}

预期结果不应该在</ul>之前有这个额外的空格。

<ul name="...">
  <li a="a"/>
  <li a="a"/>
  <li b="b"/>
  <ul name="...">
    <li b="b"/>
    <li b="b"/>

  </ul>
  <li a="a"/>

</ul>

1 个答案:

答案 0 :(得分:0)

由于Jinja正在跟踪行间距,为什么不将语句移动到一行以结束&#34;如果&#34; &#34; for&#34; jinja声明?

{% macro list(item) -%}
  <ul name="{{ item.name }}">
  {% for item in item.list -%}
    {% if item.a -%}
      <li a="{{ item.a }}"/>
    {% elif item.b -%}
      <li b="{{ item.a }}">
    {% item.name -%}
      {{- list(item) }}{% endif -%}{%- endfor %}
  </ul>
{% endmacro -%}