【问题标题】:Django extends not including child fileDjango 扩展不包括子文件
【发布时间】:2012-09-02 05:03:18
【问题描述】:

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

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 的内容。这可能是什么原因造成的?

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>

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

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

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

    Django 建议你不要定义多个同名的模板块。

    来自Template inheritance

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

    【讨论】:

    • 非常感谢!你是一个绅士和一个学者。一旦SO时间限制过去,我会接受你的回答:)
    • @LittleBobbyTables 谢谢你的好话!
    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2019-02-22
    相关资源
    最近更新 更多