===================================== 编写您的第一个Django应用, 第6部分 ===================================== 本节教程接着 :doc:`第5部分 ` ,我们构建了一个经过测试的 Web 投票应用, 现在我们会添加一张表格和一张图片。 除了服务端生成的 HTML , 通常 Web 应用还需要提供额外的一些文件——例如图片、 JavaScript 代码, 或者 CSS 样式表 —— 以便渲染完整的 Web 页面,在 Django 中,我们将这些文件称为“静态资源文件”。 对那些小项目,这显得并不特别重要,因为您可以将这些文件放在任何 Web 服务器可以找到的地方, 但是在大型项目中——尤其是那些由好几个应用组成的站点——在这种情况下,需要花更多的精力来处理 由每个应用提供的静态资源文件。 这也正是 ``django.contrib.staticfiles`` 模块的目标:它会搜集每个应用提供的静态资源文件 (包括其他您指定的位置),并将这些文件放到一个统一的位置,以便产品发布时可以引用。 自定义您应用的外观 ==================================== 首先,在您的 ``polls`` 文件夹中创建一个 ``static`` 目录, Django 稍后会从这里寻找静态资源文件, 就像会从 ``polls/templates/`` 寻找模板文件那样。 Django 的配置项 :setting:`STATICFILES_FINDERS` 包含了一个需要如何查找静态资源文件的 检索器列表。默认提供了一个 ``AppDirectoriesFinder`` ,它的工作方式即从每个 :setting:`INSTALLED_APPS` 中安装的应用下的 "static" 子目录收集静态资源文件。管理站点模块也是通过这种方式来搜集其提供的 静态资源文件。 在您刚刚创建的 ``static`` 文件夹中,创建一个叫 ``polls`` 的文件夹,并在里面创建一个文件 ``style.css`` 。 换句话说,您的样式表文件应该位于 ``polls/static/polls/style.css`` 。因为 ``AppDirectoriesFinder`` 的工作方式,您可以在模板文件中使用 ``polls/style.css`` 来引用该文件。 .. admonition:: 静态资源文件名字空间 就像模板文件那样,我们可能直接将静态资源文件放入 ``polls/static`` (而不是再创建一个 ``polls`` 子目录),但这不是一个好主意。 Django 会选中那些第一个命中的静态资源文件,如果您在另一个 * 不同 * 的应用中也存在一个一模一样名字的文件, Django 并不会区分它们。我们需要告诉 Django 选择正确的那个,要满足这种场景,最简单的方式就是通过 * 名字空间 * 划分。也就是, 通过将不同静态资源文件放入根据应用命名的目录,来界定应用中具体选择的静态资源文件。 在样式表 (``polls/static/polls/style.css``) 中放入下面: .. snippet:: css :filename: polls/static/polls/style.css li a { color: green; } 接着,在 ``polls/templates/polls/index.html`` 的头部加入: .. snippet:: html+django :filename: polls/templates/polls/index.html {% load static %} 模板标签 ``{% static %}`` 会生成该静态资源文件的绝对 URL 。 这就是您所要做的全部的开发工作。重新刷新 ``http://localhost:8000/polls/`` 然后您会看到 问题链接变成绿色了( Django 的样式!),说明您的样式表已经生效了。 添加背景图片 ========================= 接下去,我们要创建一个放置图片的子目录,在 ``polls/static/polls/`` 中创建一个 ``images`` 子文件夹,在这个目录中,放置一张图片 ``background.gif`` 。换句话说,这张图片的路径是 ``polls/static/polls/images/background.gif`` 。 接着,修改您的样式表 (``polls/static/polls/style.css``) : .. snippet:: css :filename: polls/static/polls/style.css body { background: white url("images/background.gif") no-repeat right bottom; } 重新刷新 ``http://localhost:8000/polls/`` ,您应该就能在屏幕底部的右侧看到我们的背景图案了。 .. warning:: 当然您无法在那些并不是由 Django 生成的静态资源文件像是刚才的样式表中使用 ``{% static %}`` 模板标签,您应该这些静态资源文件中总是使用 ** 相对路径 ** 来链接其他静态资源文件,这样在您 稍后可能修改了 :setting:`STATIC_URL` (使用 :ttag:`static` 模板标签生成它们的 URL )后, 并不需要在您的静态资源文件中修改大量的路径。 这些都是 ** 基础知识 ** 。想要了解更多的细节,请参考 :doc:` 静态资源文件入门 ` 和 :doc:` 静态资源文件指南 ` 。如果想了解如何将您的静态资源文件发不到 真实的服务器上请阅读 :doc:` 部署静态资源文件 ` 。 如果您对静态资源文件已经建立了初步印象,请阅读 :doc:` 第7部分 ` 来了解 如何定制我们自动生成的管理站点。