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

本教程从教程 5结束的地方开始。我们已经构建了一个经过测试的网络投票应用程序,现在我们将添加一个样式表和一张图片。

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

对于小型项目来说,这并不是什么大问题,因为你可以将静态文件保存在 Web 服务器可以找到的位置。但是,在大型项目中——尤其是在由多个应用程序组成的项目中——处理每个应用程序提供的多组静态文件会变得非常棘手。

这就是django.contrib.staticfiles的作用:它会将你每个应用程序(以及你指定的任何其他位置)中的静态文件收集到一个单一位置,以便在生产环境中轻松提供服务。

在哪里寻求帮助

如果你在学习本教程的过程中遇到问题,请访问常见问题解答部分的获取帮助部分。

自定义你的应用外观

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

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

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

静态文件命名空间

就像模板一样,我们可能能够通过将静态文件直接放入polls/static(而不是创建另一个polls子目录)来解决问题,但这实际上是一个坏主意。Django 将选择它找到的第一个名称匹配的静态文件,如果你在不同的应用程序中有一个同名的静态文件,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" href="{% static 'polls/style.css' %}">

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

对于开发来说,这就是你需要做的全部工作。

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

$ python manage.py runserver
...\> py manage.py runserver

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

添加背景图片

接下来,我们将为图像创建一个子目录。在polls/static/polls/目录中创建一个images子目录。在这个目录中,添加任何你想用作背景的图像文件。在本教程中,我们使用一个名为background.png的文件,其完整路径为polls/static/polls/images/background.png

然后,在你的样式表(polls/static/polls/style.css)中添加对你的图像的引用

polls/static/polls/style.css
body {
    background: white url("images/background.png") no-repeat;
}

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

警告

{% static %}模板标签不能用于非 Django 生成的静态文件,例如你的样式表。你应该始终使用**相对路径**来链接彼此之间的静态文件,因为这样你就可以更改STATIC_URLstatic模板标签用来生成其 URL)而无需修改静态文件中的大量路径。

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

当你熟悉静态文件后,请阅读本教程的第七部分,了解如何自定义 Django 自动生成的管理站点。

返回顶部