Django 1.10中文文档-第一个应用Part6-静态文件
本教程上接Part5 。前面已经建立一个网页投票应用并且测试通过,现在主要讲述如何添加样式表和图片。
除由服务器生成的HTML文件外,网页应用一般还需要提供其它必要的文件——比如图片、JavaScript脚本和CSS样式表。这样才能为用户呈现出一个完整的网站。 在Django中,这些文件统称为“静态文件”。
如果是在小型项目中,这只是个小问题,因为你可以将它们放在网页服务器可以访问到的地方。 但是呢,在大一点的项目中——尤其是由多个应用组成的项目,处理每个应用提供的多个静态文件集合还是比较麻烦的。
但是Django提供了django.contrib.staticfiles:它收集每个应用(和任何你指定的地方)的静态文件到一个单独的位置,使得这些文件很容易维护。
自定义应用外观
首先在polls路径中创建一个static目录。Django会从这里搜索静态文件,这个和Django在polls/templates/中查找对应的模板文件的方式是一样的。
Django有一个STATICFILES_FINDERS的查找器,它会告诉Django从哪里查找静态文件。 其中有个内建的查找器AppDirectoriesFinder,它的作用是在每个INSTALLED_APPS下查找“static”子目录下的静态文件。管理站点的静态文件也是使用相同的目录结构。
在你刚刚创建的static目录中,再创建一个polls目录并在它下面创建一个文件style.css。这样你的style.css样式表应该在polls/static/polls/style.css。因为根据AppDirectoriesFinder静态文件查找器的工作方式,Django会在polls/static找到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中添加如下内容:
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />
{%static%}模板标签用户生成静态文件的绝对URL。以上你在开发过程中所需要对静态文件做的所有处理。 浏览器中重新载入http://localhost:8000/polls/, 你应该会看到Question的超链接变成了绿色(Django的风格),这也表明你的样式表成功引入了。
添加背景图片
下一步,我们将创建一个子目录来存放图片。在polls/static/polls/目录中创建一个images子目录。在这个目录中,放入一张图片background.gif。换句话,将你的图片放在polls/static/polls/images/background.gif。然后,在样式表中添加(polls/static/polls/style.css):
body {
background: white url("images/background.gif") no-repeat right bottom;
}
重新加载http://localhost:8000/polls/ ,你应该在屏幕的右下方看到载入的背景图片。
警告:{% static %} 模板标签在不是由 Django 生成的静态文件(比如样式表)中是不可用的。在以后开发过程中应该使用相对路径来相互链接静态文件,因为这样你可以只改变STATIC_URL( static模板标签用它来生成URLs)而不用同时修改一大堆静态文件的路径。
这一上仅仅是基础。有关框架中包含的设置和其他更多详细信息,参见静态文件howto 和静态文件参考。部署静态文件讲述如何在真实的服务器上使用静态文件。
当您对静态文件掌握的差不多了时,请阅读本教程的第7部分,了解如何自定义Django自动生成的管理站点。
快速通道
- Django 1.10中文文档-第一个应用Part1-请求与响应
- Django 1.10中文文档-第一个应用Part2-模型和管理站点
- Django 1.10中文文档-第一个应用Part3-视图和模板
- Django 1.10中文文档-第一个应用Part4-表单和通用视图
- Django 1.10中文文档-第一个应用Part5-测试
- 项目地址
Django 1.10中文文档-第一个应用Part6-静态文件的更多相关文章
- Django 1.10中文文档-第一个应用Part7-自定义管理站点
开发第一个Django应用,Part7 本教程上接Part6.将继续完成这个投票应用,本节将着重讲解如果用Django自动生成后台管理网站. 自定义管理表单 通过admin.site.register ...
- Django 1.10中文文档-第一个应用Part2-模型和管理站点
本教程继续Part1.我们将设置数据库,创建您的第一个模型,并快速介绍Django的自动生成的管理网站. 数据库设置 现在,编辑mysite/settings.py.它是一个用模块级别变量表示Djan ...
- Django 1.10中文文档-第一个应用Part5-测试
本教程上接教程Part4. 前面已经建立一个网页投票应用,现在将为它创建一些自动化测试. 自动化测试简介 什么是自动化测试 测试是检查你的代码是否正常运行的行为.测试也分为不同的级别.有些测试可能是用 ...
- Django 1.10中文文档-第一个应用Part4-表单和通用视图
本教程接Part3开始.继续网页投票应用程序,并将重点介绍简单的表单处理和精简代码. 一个简单表单 更新一下在上一个教程中编写的投票详细页面的模板polls/detail.html,让它包含一个HTM ...
- Django 1.10中文文档-第一个应用Part3-视图和模板
本教程上接Django 1.10中文文档-第一个应用Part2-模型和管理站点.我们将继续开发网页投票这个应用,主要讲如何创建一个对用户开放的界面. 概览 视图是Django应用中的一“类”网页,它通 ...
- Django 1.10中文文档-第一个应用Part1-请求与响应
在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点: 一个可以进行增删改查的后台admin管理界面: 我们假设你已经安装了Django.您可以 ...
- Django 1.10中文文档—第一个Django应用Part1
在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点: 一个可以进行增删改查的后台admin管理界面: 我们假设你已经安装了Django.您可以 ...
- Django 1.10中文文档-执行查询
Django 1.10中文文档: https://github.com/jhao104/django-chinese-doc 只要创建好 数据模型, Django 会自动为生成一套数据库抽象的API, ...
- Django 1.10中文文档-聚合
Django 数据库抽象API 描述了使用Django 查询来增删查改单个对象的方法. 然而,有时候你要获取的值需要根据一组对象聚合后才能得到. 这个主题指南描述了如何使用Django的查询来生成和返 ...
随机推荐
- Python爬虫requests判断请求超时并重新发送请求
下面是简单的一个重复请求过程,更高级更简单的请移步本博客: https://www.cnblogs.com/fanjp666888/p/9796943.html 在爬虫的执行当中,总会遇到请求连接 ...
- MySQL & export
MySQL & export mysql export table form command line https://cn.bing.com/search?q=mysql%20export% ...
- 【bzoj1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 后缀数组+离散化
题目描述 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个“模式”. John的牛奶按质量可以被赋予一 ...
- 51nod 1286 三段子串(树状数组+拓展kmp)
题意: 给定一个字符串S,找到另外一个字符串T,T既是S的前缀,也是S的后缀,并且在中间某个地方也出现一次,并且这三次出现不重合.求T最长的长度. 例如:S = "abababababa&q ...
- BZOJ3990:[SDOI2015]排序——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3990 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作 ...
- 斜率优化第一题! HDU3507 | 单调队列优化DP
放一手原题 题解: 第一次写(抄)斜率优化,心里还是有点小激动的.讲一下怎么实现的! 首先我们可以考虑一个朴素的dp:DP[i]表示前i个数字的最少花费,显然我们有一个转移方程 DP[i]=min{D ...
- 洛谷 P2730 魔板 Magic Squares 解题报告
P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...
- mysql 读写分离,主从同步 理论
mysql主从复制中:第一步:master记录二进制日志.在每个事务更新数据完成之前,master在二进制日志记录这些改变.MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的.在事件写入二 ...
- 使用Phoenix将SQL代码移植至HBase
1.前言 HBase是云计算环境下最重要的NOSQL数据库,提供了基于Hadoop的数据存储.索引.查询,其最大的优点就是可以通过硬件的扩展从而几乎无限的扩展其存储和检索能力.但是HBase与传统的基 ...
- 理解Linux文件系统挂载参数noatime nodiratime
很多线上服务器为了提供文件系统IO性能,会在挂载文件系统的时候指定“noatime,nodiratime”参数,意味着当访问一个文件和目录的时候,access time都不会更新.但是如果未指定上面的 ...