Python教程之七-----编写你的第一个Django应用(6)

来源:互联网 发布:cad绘图软件中文版 编辑:程序博客网 时间:2024/05/21 21:39

这个教程紧接教程(5).我们已经建立了一个网页问卷调查应用,我们现在将添加一个样式表和一个图片。除了服务器生成的HTML外,web应用程序通常需要添加额外的文件 -- 例如图片,JavaScript,或者CSS -- 必须的用于渲染完成的网页页面。在Django中,我们将这些文件称为“静态文件”。


对于小一些的项目,这不是什么大问题,因为你可以将静态文件放在你web服务器能找到的地方。然后,在大的项目中,尤其是由多个应用组成的 -- 处理多个由每个应用提供的静态文件集开始变得棘手。


那就是django.contrib.staticfiles的目的:它从每个你的应用中搜集静态文件(和你指定的任何地方)到一个可以很容易在生产中服务的地址。


1. 定制你应用的外观和感觉

首先,在你的polls路径下创建一个目录名为static。Django将会在那里寻找静态文件,和Django如何在polls/templates/中找到模板相似。


Django的STATICFILES_FINDERS设置包含了发现者的列表,它知道如何去从可变的源中发现静态文件。默认中的一个是AppDerectoriesFinder,它在每个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.cssli 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 %}模板标签产生静态文件的绝对URL。


那就是为了你开发需要做的。重载http://localhost:8000/polls/你将会看到questions的链接都是绿色的(Django的风格!),这意味着你的样式表被正确的加载了。

2. 添加背景图片

下一步,我们将创建一个存放图片的子路径。在polls/static/polls/路径下创建一个images子路径。在这个路径里,放一张称为background.gif的图片。换句话说,将你的图片放在polls/static/polls/images/background.gif。


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

polls/static/polls/style.cssbody {    background: white url("images/background.gif") no-repeat right bottom;}

重新加载http://localhost:8000/polls/你将会看到加载在屏幕右下角的背景图片。

警告

当然{% static %}模板标签不能用在像你的样式表这样的静态文件中,因为他们不是Django生成的。你应该总是使用相对路径来链接你的静态文件,因为你可以修改STATIC_URL(被static模板标签用于生成它的URLs)而不用修改在你静态文件中的大量的路径。

这些是基础。有关设置和框架中包含其他部分的详细信息请阅读<静态文件操作方式>和<静态文件指引>。<部署静态文件>讨论如何使用静态文件在一个真正的服务器上。






阅读全文
0 0