你好我是Django的新手,今天开始学习它,我有模板继承问题 我认为我有这样的功能:
def show(request, id=1):
return render_to_response('template1.html', {
'name': name,
'model1': Model1.objects.get(id=id),
'model2': Model2.objects.get(id=id).model1,
})
我有3个不同的模板,main.html带有这样的代码:
<body>
{% block block1 %}
{% endblock %}
{% block block2 %}
{% endblock %}
</body>
</html>
以及另外两个包含类似代码的tempaltes:
{% extends 'main.html' %}
{% block block1 %}
<h2>{{ var }}</h2>
<pre>{{ var }}</pre>
{% endblock %}
第二个是非常相似所以我不会显示它,问题是:我不知道哪个放入render_to_response函数。 如果我把main.html:
return render_to_response('main.html', {
它没有加载任何模板,但是来自main.html的内容显示得很好,我只能看到页面上的空白区域 如果我把template1:
return render_to_response('template1.html', {
它只加载来自main和template1.html的内容,但我需要来自template2.html的内容
如果我将template2.html用于运行,它只显示来自main.html和template2.html的内容,但没有来自template1.html的内容 请帮我解决这个问题。
答案 0 :(得分:6)
选项1)尝试使用{% include %}
标记。
main.html
<head> ... </head>
<body>
{% block content %}
{% endblock content %}
template1.html
{% extends "main.html" %}
{% block content %}
<h1>Hello world</h1>
{% include "nested_template2.html" %}
{% endblock content %}
nested_template2.html
<p>The world is smaller than you think.</p>
在您的视图/控制器中:
return render_to_response('template1.html', {
选项2)链{% extends ... %}
标记尽可能深。我经常使用这种结构:
templates/
----base.html
----projects/
----_.html
----detail.html
----list.html
base.html
是主布局。 folder/_.html
特定于“阶段”(更多模块化内容)。
base.html
<head> ... </head>
<body>
{% block stage_content %}
{% endblock stage_content %}
projects/_.html
{% extends "main.html" %}
{% block stage_content %}
<h1>Project Stage</h1>
{% block page_content %}
{% endblock page_content %}
{% endblock stage_content %}
projects/list.html
{% extends "projects/_.html" %}
{% block page_content %}
{% for project in projects %}
<li>{{ project.name }}</li>
{% endfor %}
{% endblock page_content %}
projects/detail.html
{% extends "projects/_.html" %}
{% block page_content %}
Viewing project {{ project.name }}
{% endblock page_content %}
在您的视图/控制器中:
return render_to_response('projects/detail.html', {