本教程从以下位置开始 Tutorial 5 停下来了。我们已经构建了一个经过测试的Web投票应用程序,现在我们将添加一个样式表和一个图像。
除了服务器生成的HTML之外,Web应用程序通常还需要提供渲染完整网页所需的额外文件(例如图像、JavaScript或CSS)。在Django中,我们将这些文件称为“静态文件”。
对于小型项目来说,这没什么大不了的,因为您可以将静态文件保存在Web服务器可以找到的地方。然而,在更大的项目中--尤其是由多个应用程序组成的项目--处理每个应用程序提供的多组静态文件开始变得棘手。
是这么 django.contrib.staticfiles
是为了:它将每个应用程序(以及您指定的任何其他位置)的静态文件收集到一个可以轻松在生产中提供服务的位置。
从哪里获得帮助:
如果您在阅读本教程时遇到困难,请访问 Getting Help 部分的常见问题解答。
首先,创建一个名为 static
在你的 polls
目录. Django将在那里寻找静态文件,类似于Django在里面寻找模板的方式 polls/templates/
。
姜戈的 STATICFILES_FINDERS
设置包含知道如何从各种来源发现静态文件的查找器列表。默认值之一是 AppDirectoriesFinder
它在每个 INSTALLED_APPS
,就像那个 polls
我们刚刚创建的。管理站点对其静态文件使用相同的目录结构。
在 static
您刚刚创建的目录,创建另一个名为 polls
并在其中创建一个名为 style.css
.换句话说,您的造型师应该在 polls/static/polls/style.css
.因为 AppDirectoriesFinder
静态文件查找器可以工作,您可以在Django中将此静态文件称为 polls/style.css
,类似于引用模板路径的方式。
静态文件命名空间
就像模板一样,我们 might 能够直接将静态文件放入 polls/static
(而不是创建另一个 polls
),但这实际上是一个坏主意。Django将选择它找到的第一个名称匹配的静态文件,并且如果您在 different 应用程序中,Django将无法区分它们。我们需要能够将Django指向正确的位置,确保这一点的最佳方法是 namespacing 他们也就是说,通过将这些静态文件放入其中 another 为应用程序本身命名的目录。
将以下代码放入该样式表中 (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风格!)这意味着您的样式表已正确加载。
接下来,我们将为图像创建一个子目录。创建一个 images
子目录中的 polls/static/polls/
目录。在此目录中,添加要用作背景的任何图像文件。出于本教程的目的,我们使用一个名为 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生成的静态文件,例如您的样式表。你应该总是使用 relative paths 将静态文件相互链接,因为这样您就可以更改 STATIC_URL
(used由 static
模板标签来生成其URL),而不必修改静态文件中的一系列路径。
这些都是 basics .有关框架中包含的设置和其他部分的更多详细信息,请参阅 the static files howto 和 the staticfiles reference 。 Deploying static files 讨论如何在真实服务器上使用静态文件。
当您对静态文件感到满意时,请阅读 part 7 of this tutorial 了解如何自定义Django自动生成的管理网站。
5月 28, 2025