将2个子模板集成并呈现到基本模板中 - Django

时间:2014-12-08 05:21:51

标签: python html django

enter image description here

我有一个基本模板(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填充另一块?

2 个答案:

答案 0 :(得分:2)

你应该让第一个孩子扩展第二个孩子,这将扩展基础html。这是在django中扩展多个子模板的方法。

因此,您的代码应如下所示:

的index.html

<html>
<body>
  {% block 'body1' %}
  {% endblock %}
  {% block 'body2' %}
  {% endblock %}
</body>
</html>

ipsum.html

{% extends 'index.html' %}
{% block 'body1' %}
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit</p>
{% endblock %}

need.html

{% extends 'ipsum.html' %}
{% block 'body2' %}
    <p>Quo usque tandem abutere, Catsdsilina, patientia nostra?</p>
{% endblock %}

views.py

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

这是一个有效的例子:

http://biobirdman.com/stacktest/nestedtemplate/

答案 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 %}