如果我使用 % extends %,Django 会忽略子模板中的内容

Posted

技术标签:

【中文标题】如果我使用 % extends %,Django 会忽略子模板中的内容【英文标题】:Django ignores content in child template if I use % extends %如果我使用 % extends %,Django 会忽略子模板中的内容 【发布时间】:2018-11-29 11:14:34 【问题描述】:

我正在使用一个名为“base.html”的父模板,该模板位于 myproject/myproject/templates 目录中。我渲染了子模板,一切都很顺利,除了我写 % extends % 来显示父模板。 Django 的行为非常奇怪。找了好久才发现,即使在注释里面写了与父模板相关的extends,block,endblock这些东西,Django还是会忽略子模板中的内容,显示为空屏幕。如果我故意在模板的内容中出现语法错误,Django 会抛出异常(所以它真的会读取内容),但如果没有错误,浏览器只会从父模板中获取代码(我发现了这个使用检查)。如果 Django 不再与父模板建立关系,则 Django 只会显示子模板中的内容(我什至不能在注释中包含代码扩展、阻塞等)

代码如下:

子模板:

% extends "education/base.html" %
% block barraup %
block.super
%endblock%

% block barradown %
block.super
%endblock%

% load static %
<link rel="stylesheet" type="text/css" href = "% static 'principal/principal.css' %" />


<div id="presentacion">
    ...content
</div>

如果没有错误,浏览器甚至不会读取最后一个 div“presentacion”(它不会出现在 Inspect 屏幕中出现的 html 中)。

父模板:

% load static %
<head>
    <link rel="stylesheet" type="text/css" href = "% static 'education/base.css' %">
</head>

<body>
        <div id="barraup">
        % block barraup %
        ...content
        % endblock %
        </div>

        <div id="barradown">
        % block barradown %
        ...content
        % endblock %
        </div>

</body>
</html>

提前感谢您的帮助。

【问题讨论】:

您的 % static % 和其余部分没有包裹在 % block... % 中。所以它被忽略了,因为根据父母的说法,它没有必要。 没错。非常感谢。 【参考方案1】:

子模板中的所有内容都必须位于父模板中定义的块内 - 否则无处可放。

您可能应该在父级中的这两个 div 之间定义一个“内容”块,并将子内容包装在其中。

【讨论】:

成功了!我想我误解了模板继承。是时候再读一遍了!非常感谢。

以上是关于如果我使用 % extends %,Django 会忽略子模板中的内容的主要内容,如果未能解决你的问题,请参考以下文章

带有 % extends 的每页上的 Django 页脚和页眉

Django:使用条件 % extends % 使 % block "div" % 有条件

django模板中的extends和include使用方法

Django ORM:many_to_many.extend(some_queryset)

django模板白页

django-7.django模板继承(block和extends)