我有一个基本模板(index.html)和2个子模板ipsum和need。我使用块来尝试将2个孩子整合到基地中。
base.html文件
<html>
<body>
{% block 'body1' %}
<p>testing 1</p>
{% endblock %}
{% block 'body2' %}
<p>testing 2</p>
{% endblock %}
</body>
</html>
child1.html
{% extends 'base.html' %}
{% block 'body1' %}
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit</p>
{% endblock %}
child2.html
{% extends 'base.html' %}
{% block 'body2' %}
<p>Quo usque tandem abutere, Catilina, patientia nostra?</p>
{% endblock %}
如果只有一个街区,我现在明白我可以打电话给我:
def index(request):
return render_to_response('ipsum.html',context_instance=RequestContext(request))
我可以做什么来填充index.html中的两个块 - 使用ipsum.html填充其他块,使用need.html填充另一块?
答案 0 :(得分:2)
你应该让第一个孩子扩展第二个孩子,这将扩展基础html。这是在django中扩展多个子模板的方法。
因此,您的代码应如下所示:
<html>
<body>
{% block 'body1' %}
{% endblock %}
{% block 'body2' %}
{% endblock %}
</body>
</html>
{% extends 'index.html' %}
{% block 'body1' %}
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit</p>
{% endblock %}
{% extends 'ipsum.html' %}
{% block 'body2' %}
<p>Quo usque tandem abutere, Catsdsilina, patientia nostra?</p>
{% endblock %}
def index(request):
return render_to_response('need.html',context_instance=RequestContext(request))
因此首先需要呈现need.html
,它会查找ipsum.html
,当呈现ipsum.html
时,它会查找index.html
如果您想要包含而不是扩展,我建议使用Django Sekizai库http://django-sekizai.readthedocs.org/en/latest/。它包含自定义标记,例如{% include 'xx.html' %}
,如果需要,它会在您的第一个孩子中呈现第二个子模板。
干杯, BioBirdMan
这是一个有效的例子:
答案 1 :(得分:1)
实现此目的的一种方法是在基本模板中只有一个块,并在每个子模板中覆盖该块,如:
base.html:
<html>
<body>
{% block 'content' %} gets overridden {% endblock %}
</body>
</html>
child1.html:
{% extends 'base.html' %}
{% block 'content' %}
<h1> Page 1 </h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit</p>
{% endblock %}
child2.html:
{% extends 'base.html' %}
{% block 'content' %}
<h1> Page 2 </h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit</p>
{% endblock %}