编写你的第一个 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_URL
(static
模板标签用来生成其 URL)而无需修改静态文件中的大量路径。
这些是**基础知识**。有关框架中包含的设置和其他位的更多详细信息,请参阅静态文件使用指南和静态文件参考。部署静态文件讨论了如何在真实的服务器上使用静态文件。
当你熟悉静态文件后,请阅读本教程的第七部分,了解如何自定义 Django 自动生成的管理站点。