Django框架(七)编写第一个Django应用程序——第六部分

目录

编写第一个Django应用程序,第六部分

自定义应用程序的外观

添加背景图像


编写第一个Django应用程序,第六部分

我们已经构建了一个经过测试的web-poll应用程序,现在我们将为它添加样式表和图像。

除了服务器生成的HTML之外,web应用程序通常还需要提供额外的文件——比如图像、JavaScript或CSS——以呈现完整的web页面。在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)中添加以下内容:

li a {
    color: green;
}

接下来,在polls/templates/polls/index.html中使用该CSS:

{% load static %}

<link rel="stylesheet" href="{% static 'polls/style.css' %}">

{% static %}模板标签生成静态文件的绝对URL。这就是静态文件开发所需要的全部内容。

现在,让我们启动开发服务器,浏览一下使用了样式的网页内容:

python manage.py runserver

访问http://localhost:8000/polls/,你会看到问题链接是绿色的,这意味着我们的样式表被正确加载了。

添加背景图像

接下来,我们将为图像创建一个子目录。在polls/static/polls/文件夹下创建images子文件夹,在该文件夹中,添加一张你喜欢的图片作为背景图片。为了表明图片的含义,我们把图片命名为background.jpg,它的全路径为polls/static/polls/images/background.jpg

然后,在样式表中添加对图像的引用(polls/static/polls/style.css):

body {
    background: white url("images/background.jpg") no-repeat;
}

再次访问http://localhost:8000/polls/,你会看到网页已经被加上了背景。

欢迎关注我的公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值