Django - 用模板中的循环包装子块

时间:2014-07-31 20:17:33

标签: django templates loops

我对Django很新,虽然我知道你不能在一个模板中有多个具有相同名称的块(没有一些黑客攻击),但我正在寻找一种方法以下内容:

#parent template
{% for item in block %}
    <div class="outer">
      <div class="inner">
      {% block item %}{% endblock %}
      </div>
    </div>
{% endfor %}


#child template
{% extends "parent_template" %}
{% block item %}
  <p>Foo Goes Here</p>
{% endblock %}

{% block item %}
  <p>Bar Goes Here</p>
{% endblock %}

依此类推,结果如下:

<div class="outer">
    <div class="inner">
      <p>Foo Goes Here</p>
    </div>
</div>
<div class="outer">
    <div class="inner">
      <p>Bar Goes Here</p>
    </div>
</div> ... etc ...

它并非必须是特定的&#39;如上所述,但这是一般的想法。

希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

我想你现在已经解决了这个问题,但是如果其他人需要做同样的事情,我相信最简单的(也可能是唯一的)方法是将你需要的部分提取到一个单独的模板中并将其包含在一个循环。 例如,在你的情况下,我会做类似的事情:

# collection.html
{% for item in block %}
     {% include "item.html" with element=item %}
{% endfor %}
# item.html
<div class="outer">
   <div class="inner">
   {{element}}
   </div>
</div>

这里的主要缺点是性能(可能是也可能不是问题)以及当您需要更改内部位时可能必须扩展两个不同模板的事实,因为您必须更改集合中包含的内容。当然,您可以通过使用变量来决定要包含的item.html模板,例如:

{% include item_template with element=item %}