在Django模板中多次使用相同标签包装内容

时间:2018-06-17 19:22:12

标签: html django

给定包含以下内容的base.html文件:

<div class="foo some-content">
    ...content...
</div>
<div class="bar some-content">
    ...different content...
</div>

在某些地方使用base.html时,我想包装每个.some-content div以实现嵌套结构:

  <div class="row">
    <div class="foo some-content">
      ...content...
    </div>
  </div>
  <div class="row">
    <div class="bar some-content">
      ...different content...
    </div>
  </div>

我尝试扩展base.html以使用.row div包装div:

{% extends base.html %}
{% block wrapper %}
 <div class "row">
  {{ block.super }}
 </div>
{% endblock %}

但是这不起作用,因为我在base.html中使用TemplateSyntaxError两次block wrapper

  # Throws TemplateSyntaxError
  {% block wrapper %}
    <div class="foo some-content">
      ...content...
    </div>
  {% endblock %}
  {% block wrapper %}
    <div class="bar some-content">
      ...different content...
    </div>
  {% endblock %}

我意识到我可以将.some-content div分解为自己的文件,并在其他地方重用它们,但我更喜欢另一条路线。我还按Django template macros中的建议查看了this SO answer,但我认为中间件在这种情况下会有些过分。

我有什么方法可以扩展或重复使用我当前的base.html文件,以便.some-content div有时包含在.row div中?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

{% with foo as var %}
{% include 'mycontainer.html' %}
{$ endwith %}
{% with bar as var %}
{% include 'mycontainer.html' %}
{$ endwith %}

然后mycontainer.html将是:

<div class="row">
    <div class="{{ var }} some-content">
  ...
    </div>
</div>