编写你的第一个 Django 应用程序,第 6 部分 — Django 文档

来自菜鸟教程
Django/docs/2.2.x/intro/tutorial06
跳转至:导航、​搜索

编写你的第一个 Django 应用,第 6 部分

本教程从 教程 5 停止的地方开始。 我们已经构建了一个经过测试的 Web 投票应用程序,现在我们将添加一个样式表和一个图像。

除了服务器生成的 HTML 之外,Web 应用程序通常还需要提供渲染完整网页所需的其他文件,例如图像、JavaScript 或 CSS。 在 Django 中,我们将这些文件称为“静态文件”。

对于小型项目,这没什么大不了的,因为您可以将静态文件保存在 Web 服务器可以找到的地方。 然而,在更大的项目中——尤其是那些由多个应用程序组成的项目——处理每个应用程序提供的多组静态文件开始变得棘手。

这就是 django.contrib.staticfiles 的用途:它将来自您的每个应用程序(以及您指定的任何其他位置)的静态文件收集到一个可以轻松在生产中提供服务的位置。

自定义您的 应用程序的 外观和感觉

首先,在您的 polls 目录中创建一个名为 static 的目录。 Django 将在那里寻找静态文件,类似于 Django 在 polls/templates/ 中寻找模板的方式。

Django 的 :setting:`STATICFILES_FINDERS` 设置包含知道如何从各种来源发现静态文件的查找器列表。 默认值之一是 AppDirectoriesFinder,它在每个 :setting:`INSTALLED_APPS` 中查找“静态”子目录,就像我们刚刚创建的 polls 中的那个。 管理站点对其静态文件使用相同的目录结构。

在您刚刚创建的 static 目录中,创建另一个名为 polls 的目录,并在其中创建一个名为 style.css 的文件。 换句话说,您的样式表应该在 polls/static/polls/style.css。 由于 AppDirectoriesFinder 静态文件查找器的工作方式,您可以在 Django 中简单地将这个静态文件称为 polls/style.css,类似于您引用模板路径的方式。

静态文件命名空间

就像模板一样,我们 可能 能够将我们的静态文件直接放在 polls/static 中(而不是创建另一个 polls 子目录),但它实际上是一个馊主意。 Django 会选择它找到的第一个名称匹配的静态文件,如果你在 different 应用程序中有一个同名的静态文件,Django 将无法区分它们。 我们需要能够将 Django 指向正确的位置,而确保这一点的最简单方法是通过 命名空间 它们。 也就是说,将这些静态文件放在以应用程序本身命名的 另一个 目录中。


将以下代码放入该样式表 (polls/static/polls/style.css):

polls/static/polls/style.css

li a {
    color: green;
}

接下来,在 polls/templates/polls/index.html 的顶部添加以下内容:

polls/templates/polls/index.html

{% load static %}

<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}">

{% static %} 模板标签生成静态文件的绝对 URL。

这就是您需要为开发做的所有事情。

启动服务器(如果它已经在运行,则重新启动它):

重新加载 http://localhost:8000/polls/,您应该会看到问题链接是绿色的(Django 风格!),这意味着您的样式表已正确加载。


添加一个背景图

接下来,我们将为图像创建一个子目录。 在polls/static/polls/目录下创建一个images子目录。 在此目录中,放置一个名为 background.gif 的图像。 换句话说,将您的图像放在 polls/static/polls/images/background.gif 中。

然后,添加到您的样式表 (polls/static/polls/style.css):

polls/static/polls/style.css

body {
    background: white url("images/background.gif") no-repeat;
}

重新加载 http://localhost:8000/polls/,您应该会在屏幕左上角看到加载的背景。

警告

当然, {% static %} 模板标签不可用于静态文件,例如非 Django 生成的样式表。 您应该始终使用 相对路径 将静态文件相互链接,因为这样您就可以更改 :setting:`STATIC_URL`(由 :ttag:`static ` 模板标记以生成其 URL),而无需修改静态文件中的一堆路径。


这些是 基础知识 。 有关框架中包含的设置和其他位的更多详细信息,请参阅 静态文件 howto静态文件参考部署静态文件讨论如何在真实服务器上使用静态文件。

如果您对静态文件感到满意,请阅读本教程的 第 7 部分 以了解如何自定义 Django 自动生成的管理站点。