在Jinja2中有可能出现这种行为吗?

时间:2014-11-06 12:50:37

标签: templates macros jinja2

我有一个我将处理的字符串列表,为了简洁起见,我将它们作为跨度写在这里。

我想要一些html进入div,所以,

<div class="something">
  <span>something1</span>
  <span>something2</span>
  <span>something3</span>
  ...
</div>

以及其他一些外部(取决于某些条件)

  <span>something-else1</span>
  <span>something-else2</span>
  <span>something-else3</span>
  ...

因此条件来自列表中的某些内容。有没有什么方法可以让我在宏调用者处停止控制,这样我就可以再次调用相同的宏,以便将下一个跨度添加到同一个地方?

类似

{% macro render_inside_div %}
  <div class="something">
    {{ caller() }} <-- I want to render multiple spans in within the same div
  </div>
{% endmacro %}

编辑:

是的,当然这会起作用,而且(有点)我是如何让它继续工作的。但我一直在寻找一种“清洁”和干燥的解决方案。所以基本上我只是迭代列表一次,它的工作方式是这样的:

{% for row in my_list %}
  {% if row.condition_for_div %}
    {% call render_in_div %}  {# Look before to see the macro I've written above #}
      {{ do_something(row.data) }}
    {% endcall %}
  {% else %}
    {{ do_something(row.data) }}
  {% endif %}
{% endfor %}

所以在这个render_in_div中我想多次将控制权交给caller()块,所以控件(对于那个“上下文”)会保留在那里直到我说出去(在某种程度上像一个发生器?)

0 个答案:

没有答案