0

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

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

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

但是,如果我使用包含,例如 {% extends "base.html" %},它只会返回 base.html 而不会添加来自子 home.html 的内容。这可能是什么原因造成的?

主页.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>

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

4

1 回答 1

1

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

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

模板继承

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

于 2012-09-08T17:28:53.180 回答