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

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

除了由服务器生成的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 Because of how the AppDirectoriesFinder staticfile finder works, you can refer to this static file in Django simply as polls/style.css, similar to how you reference the path for templates.

静态文件命名空间

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

把下面的代码放在样式表(polls/static/polls/style.css)中:

poll/statc/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 %}模板标签会生成静态文件的绝对网址。

这就是你需要为开发所做的一切。 重新加载http://localhost:8000/polls/,你应该看到问题链接是绿色的(Django风格!) 这意味着你的样式表已经正确加载。

添加背景图像

接下来,我们将为图像创建一个子目录。 polls/static/polls/目录中创建一个images子目录。 在这个目录里面,放一个叫做background.gif的图片。 换句话说,把你的图像放在polls/static/polls/images/background.gif中。

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

民调/静态/调查/ style.css中
body {
    background: white url("images/background.gif") no-repeat right bottom;
}

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

警告

Of course the {% static %} template tag is not available for use in static files like your stylesheet which aren’t generated by Django. You should always use relative paths to link your static files between each other, because then you can change STATIC_URL (used by the static template tag to generate its URLs) without having to modify a bunch of paths in your static files as well.

这些是基础 有关该框架中包含的设置和其他位的更多详细信息,请参阅the static files howtothe staticfiles reference Deploying static files讨论如何在真实服务器上使用静态文件。

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