我们可以将部分 css 文件包含到模板文件中吗?

xor*_*xor 2 html css python django django-templates

我打算以模块化的方式创建一个主页。主页可能有一个页眉、一个页脚和一个主要部分,我想将标记和特定于每个部分的 css 分开。因此,如果我需要其他页面上的这些部分,我可以只包含这些文件。

所以我需要能够以类似的方式将 css 文件包含到模板中,我可以包含一个 html 文件。我可以将所有样式保留在同一个 css 文件中,但是如果我稍后删除一些 html 文件,我希望也删除该文件的样式。

所以我想出了这个最小的例子,它适用于我的设置,但我不确定它是否适用于任何地方,或者它是否在 django 中是惯用的。

正如您在下面看到的,我在基本 html 文件中定义了一个头部部分,在包含的 html 文件中定义了另一个部分。我需要这两个部分来定义指向相应 css 文件的链接。不过,我阅读了关于head html 标签的文档,但我不太确定我是否可以只定义多个头部部分,而且我不确定包含文件中的头部部分会在哪里结束,它似乎会最终位于基本文件的正文部分,我不知道是否所有浏览器都能正确呈现。

所以我的问题是:我可以在所有平台上这样做吗?我应该这样做吗?有没有另一种更好的方法来做到这一点?

我收到了一些使用继承的建议,我不确定这是否可行,我没有可以对子项进行一些更改然后渲染子项的基本文件。我有几个文件,它们定义了主页的几个不同部分,我需要将它们组合在一起。

基地.html:

{% load static %}
<!DOCTYPE html>
<html>

<head>
    <link rel="stylesheet" type="text/css"
        href="{% static "appfolder/css/base.css" %}" />
</head>

<body>
{% include "header.html" %}
{% include "main.html" %}
{% include "footer.html" %}
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

基础.css:

.header {
background-color: red;
}

.footer {
background-color: blue;
}
Run Code Online (Sandbox Code Playgroud)

主文件:

{% load static %}

<head>
    <link rel="stylesheet" type="text/css"
        href="{% static "appfolder/css/main.css" %}" />
</head>

<main>
    main
</main>
Run Code Online (Sandbox Code Playgroud)

主文件:

.main {
background-color: green;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

您不应该在 HTML 中定义多个头部部分。但没有必要;您应该像使用任何其他元素一样使用模板继承和块。你根本不应该include在这里使用;继承要强大得多。

所以,base.html 看起来像这样:

{% load static %}
<!DOCTYPE html>
<html>

<head>
    <link rel="stylesheet" type="text/css"
        href="{% static "appfolder/css/base.css" %}" />
    {% block extrastyles %}{% endblock %}
</head>

<body>
<header>header</header>
{% block main %}{% endblock %}
<footer>footer</footer>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

和 main.html 是:

{% extends "base.html" %}
{% load static %}

{% block extrastyles %}
    <link rel="stylesheet" type="text/css"
        href="{% static "appfolder/css/main.css" %}" />
{% endblock %}

{% block main %}
    main
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

在您看来,您呈现的是 main.html,而不是 base.html。