是否可以在Django的派生html文件中使用基本html模板中的块标记({%block%})两次或更多次

时间:2018-02-21 01:38:53

标签: django

我希望能够在派生的html中多次重复使用相同的块标记。 类似的东西:

base.html

<body>  
    {% block panel %}  
         # some basic panel structure inside this block  
    {% endblock %}  
</body>

derived.html

{% extends base.html %}  

- 第一个小组

<div class="col">  
    {% block panel %}  
        # override things like panel header  
    {% endblock %}  
</div>  

- 第二个小组

<div class="col">  
    {% block panel %}  
        # again override some panel stuff from base template  
    {% endblock %}  
</div>

无论如何我能在Django中实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

不,它会导致模板语法错误。您可以做的最好的事情是在base中包含尽可能多的块标记并重用它们。或者您甚至可以将块循环到基础中。

我还没有对其进行测试,但理论上它应该可行。在您的基础中,创建一个循环块,在下面的示例中,它创建了6个块,阻止content1 ..... content6

{% for i in '123456' %}

{% block content{{i}} %}

Foo

{% endblock content{{i}} %}
{% endfor %} 

答案 1 :(得分:0)

不,你不能。最好的方法是,为每个面板分配每个块,或者如果你有多面板,则运行该块的循环。

在你目前的情况下(假设在单个派生文件中有两个面板),它就像这样 -

base.html文件

<body>  
    {% block content %}  
        <!-- all your panels -->
    {% endblock %}  
</body>

derived.html

{% extends "base.html" %}

{% block content %}  
 <div class="col">  
      <!-- First panel -->
      <!-- Second panel -->
  </div>
{% endblock %} 
  

该块仅用于减少每个扩展文件特有的冗余工作。所以你只能在任何扩展文件中将它引用到单次。