利用django创建一个投票网站(六)

建你的第一个 Django 项目, 第六部分

这一篇从第五部分(zh)结尾的地方继续讲起。再上一节中我们为网络投票程序编写了测试,而现在我们要为它加上样式和图片。

除了服务端生成的 HTML 以外,网络应用通常需要一些其他的文件——比如图片,脚本和样式表——来帮助渲染网络页面。在 Django 中,我们把这些文件统称为“静态文件”。

对于小项目来说,这个问题没什么大不了的,因为你可以把这些静态文件随便放在哪,只要服务程序能够找到它们就行。然而在大项目——特别是由好几个应用组成的大项目——中,处理不同应用所需要的静态文件的工作就显得有点麻烦了。

这就是 django.contrib.staticfiles 存在的意义:它将各个应用的静态文件(和一些你指明的目录里的文件)统一收集起来,这样一来,在生产环境中,这些文件就会集中在一个便于分发的地方。

自定义应用的界面和风格

首先,在 polls 目录下创建一个 static 目录。 Django 将会从这里收集静态文件,就像 Django 在polls/templates 里寻找模板一样。

Django 的 STATICFILES_FINDERS 设置项是一个列表,它包含了若干个知道如何从不同地点寻找静态文件的搜寻器。其中之一是 AppDirectoriesFinder,它会从 INSTALLED_APPS 中各个应用的 “static” 子目录中寻找文件,比如刚刚创建的 polls/static。 之前的管理页面也使用了相同的目录结构来管理静态文件。

在刚创建的 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.css */

li a {
    color: green;
}

下一步,在 polls/templates/polls/index.html 的顶部加入以下内容:

<!-- polls/templates/polls/index.html -->

{% load staticfiles %}

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

{% load staticfiles %} 语句会从 staticfiles 模板库里导入 {% static %} 模板标签。这个标签会把对静态文件的引用转化为绝对地址。

这就是你需要做的所有工作了。现在重新载入 http://localhost:8000/polls/,你会看到问题链接变成了绿色(Django 使用的样式),这说明样式表已经正常工作了。

添加背景图片

接下来,我们要为图片新建一个子目录。在 polls/static/polls 目录下创建 images 目录。然后在其中放入背景图片 background.gif。也就是说,背景图片路径为 polls/static/polls/images/background.gif

然后,在样式表文件(polls/static/polls/style.css)中加入:

/* polls/static/polls/style.css */

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

重新加载 http://localhost:8000/polls/ 你将会看到背景图片被放置在了页面的右下角。

注意!

显然 {% static %} 模板标签是无法在静态文件中使用的,比如样式表文件,因为它们不是 Django 生成的。在静态文件中,你应该使用相对路径来互相引用。因为这样的话,你可以通过改变STATIC_URLstatic 模块用它来生成 URL)达到改变静态文件地址的目的,而不需要在大量的文件中逐一修改引用文件的地址。

这些都只是基础。关于静态文件的各种设置,和框架中其余和静态文件有关的部分,请参考 the static files howto 和 the staticfiles reference。另外,Deploying static files 讨论了在真实的服务器上组织静态文件的方法。

然后呢?

初学者教程就到此结束辣!你可以访问文章 接下来如何学习 来决定下一步的学习方向。

如果你很熟系 Python 的打包机制,并且感兴趣如何将投票应用转化为一个“可重用的应用”,请看文章 高级内容:编写可重用的应用

时间: 2024-10-23 19:33:14

利用django创建一个投票网站(六)的相关文章

利用django创建一个投票网站(五)

创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测试是什么? 测试,是用来检查代码正确性的一些简单的程序. 测试在不同的层次中都存在.有些测试只关注某个很小的细节(某个模型的某个方法的返回值是否满足预期?),而另一些测试可能检查对莫个软件的一系列操作(某一用户输入序列是否造成了预期的结果?).其实这和我们在教程的第一部分(zh)里做的并没有什么不同

利用django创建一个投票网站(三)

创建你的第一个 Django 项目, 第三部分 这一篇从第二部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,并且聚焦于如何创建公用界面--也被称为"视图". 设计哲学 Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」.比如,在一个博客应用中,你可能会创建如下几个视图: 博客首页--展示最近的几项内容. 内容"详情"页--详细展示某项内容. 以年为单位的归档页--展示选中的年份里各个月份创建的内容. 以月为单位的归档页--展示选中的月份里各

利用django创建一个投票网站(四)

创建你的第一个 Django 项目, 第四部分 这一篇从第三部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码. 编写一个简单的表单 让我们更新一下在上一个教程中编写的投票详细页面的模板("polls/detail.html"),让它包含一个 HTML <form>元素: <!--- polls/template/polls/detail.html --> <h1>{{ question.question_

利用django创建一个投票网站(二)

创建你的第一个 Django 项目, 第二部分 这一篇从第一部分(zh)结尾的地方继续讲起.本节我们将继续写 Web 投票应用,并主要关注 Django 提供的自动生成的管理页面(admin site). 设计哲学 为你的员工和客户创建一个用于添加.修改和删除网站内容的管理页面是一项乏味的工作,而且不需要太多的创造力.因为这些原因,Django 提供完全自动地为模型创建管理接口的功能. Django 产生于一个公众页面和内容发布者页面完全分离的新闻类站点的开发过程中.站点管理人员使用管理系统来添

django 搭建一个投票类网站(一)

写在最前,之前零零散散的看过django,但是由于比较杂,学的云里雾里的,所以就停了一段落,但是我最近找到了一个django的书,是李建编著的django入门与实践,于是,打算照着书上的步骤来写好一个网站,希望能在结束后了解并懂得怎么使用django了吧,共勉 话不多说,这本书前面写了很详细的html,js,css,以及python编程基础,我就直接从django部分开始吧 在开始之前一定要安装django 1.创建Django工程 首先创建一个名为demo的文件,然后在cmd里进入demo目录

django创建一个简单的web站点

一.新建project 使用Pycharm,File->New Project-,选择Django,给project命名 (project不能用test命名) 新建的project目录如下: settings.py:工程相关的配置 urls.py:网站访问入口,对应到views wigs.py:部署相关 manage.py:执行命令 templates:html等静态文件 备注:新建工程后需要安装django的lib包,然后验证django是否安装成功 >>> import dja

Django 创建一个应用程序

1. 认识Django Django是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计. 由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而无需重新创建轮子. 它是免费的和开源的. 被官方称之为完美主义者的Web框架. Django可以更快地构建更好的Web应用程序并减少代码. 2. Django框架的特点: 快速开发:Django的宗旨在于帮助开发人员快速从概念到完成应用程序. 安全可靠:Django认真对待安全性,帮助开发人员避免许多常

利用Myeclipse创建一个Swing应用

在我看来,java强大之处在于:Java不仅仅适用于B/S架构的程序,是做服务端的不二之选以外;还可以用来做C/S架构的程序.虽然现在市面上越来越少使用这种技术,被诸如C#之类的语言代替,但swing的确可以实现桌面化的客户端程序.学java的最好还是要知道有swing这个东西,不然当老板问你知不知道Swing.你说不知道会很尴尬.我们总监问我和另一个同事知不知道swing,那个小伙子一脸懵逼的看着我......闲话少叙,我们一起来看一下利用Myeclipse怎么创建一个swing程序.首先准备

用django创建一个项目

首先你得安装好python和django,然后配置好环境变量,安装python就不说了,从配置环境变量开始 1.配置环境变量 在我的电脑处点击右键,或者打开 控制面板\系统和安全\系统 -> 左边导航栏的"高级系统设置"->环境变量 -->然后你会看到下面这个界面 -> 点击这个path,然后点编辑 然后找到C:\Python27文件夹,将这个文件夹添加进去. 2.安装django 打开cmd,执行 pip install django 或者 把 这个包下载下来