Django扩展不包括子文件

时间:2012-09-08 17:24:47

标签: python django django-templates

我有一个视图,从我的模板目录返回一个页面,成功,没问题:

def home(request):
    c = {}
    return render_to_response('home.html', c, context_instance=RequestContext(request))

如果 home.html 是一个没有 extends 的简单网页,则返回正常。

但是,如果我使用include,比如{%extends“base.html”%},它只返回base.html而不添加来自子home.html的内容。可能导致这种情况的原因是什么?

home.html的

{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% block content %}
This is the homepage.
{% endblock %} 

base.html文件

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{% block content %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

目前,这将返回base.html的副本,如下所示:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>

<body>

</body>

</html>

为什么不包含内容或标题栏?

1 个答案:

答案 0 :(得分:1)

在名为内容 base.html 块中出现两次。您可能希望将第一个块命名为title,例如{% block title %}{% endblock %}

Django建议您不要定义多个具有相同名称的模板块。

来自Template inheritance

最后,请注意,您无法在同一模板中定义多个具有相同名称的块标记。存在这种限制是因为块标签在“两个”方向上工作。也就是说,块标记不仅提供填充孔 - 它还定义填充父级孔的内容。如果模板中有两个具有相似名称的块标记,则该模板的父级将不知道要使用哪个块的内容。