Django 2.0.1 官方文档翻译:编写你的第一个 Django app,第六部分(Page 11)
编写你的第一个 Django app,第六部分(Page 11)转载请注明链接地址
本教程上接前面第五部分的教程。我们构建了一个经过测试的 web-poll应用,现在我们会添加一个样式表和一张图片。
除了服务器上生成的HTML,web应用一般需要其他文件 —— 例如图片,JavaScript,或CSS —— 渲染完整的web页面所必须的内容。在Django中,我们引用的这些文件称为“静态文件”。
对于小的项目,这没有什么大不了。因为你只要将这些静态文件保存到你的web服务器可以找到的地方就可以了。然而在比较大的项目中 —— 尤其有多个app组成的项目中 —— 处理多个应用提供的静态文件集合会变得很棘手。
这正是 django.contrib.staticfiles 的用途: 它从将每个应用收集到的静态文件集中到一个在生产环境中容易维护的单独的位置(意思就是把静态文件收集起来,放到一个指定的位置,这个位置为可以方便项目使用)。
自定义你的应用的外观
首先,在polls应用的目录下创建一个名为static目录。Django从这里查找静态文件,和Django在polls/templates/中查找模板一样。
Django 的STATICFILES_FINDERS(这里少一个链接)设置包含一个查找器列表,它知道如何从多个源中发现静态文件。默认的一个是AppDirectoriesFinder,它会在每个INSTALLED_APPS(这里少一个链接)中查找“static”子目录,就像查找我们刚刚在polls中创建的“static”一样。admin站点为它的静态文件使用相同的目录结构。
在你刚刚创建的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 static %}
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />
{% static %}模板标签会生成静态文件的绝对路径。
这就是你在开发中需要做的所有事情。重新打开http://localhost:8000/polls/,你会看到question的链接是绿色的(django的样式),这表示你的样式表被正确的加载了。
添加一张背景图片
下一步,我们会为图片创建一个子目录。在polls/static/polls/目录创建一个images子目录。在这个目录里,放一张名字是background.gif的图片。也就是说,把你的图片放在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 %}是django自己用的)。你应该使用相对路径将你的静态文件链接起来,因为这样你就可以修改STATIC_URL(这里少一个链接)(静态模板标签(static template tag(这里少一个链接))用来生成它的URLs)而不用修改许多静态文件中的路径。
这些都是基础知识,更多关于设置和其他细节的内容请查看 the static files howto(这里少一个链接) 和 the staticfiles reference(这里少一个链接)。Deploying static files(这里少一个链接) 讨论如何在真是的服务器上使用静态文件。
如果你已经熟悉了静态文件,就可以开始学习下一节内容了:如何自定义django自动生成的admin站点(page 12)。
Django 2.0.1 官方文档翻译:编写你的第一个 Django app,第六部分(Page 11)的更多相关文章
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第一部分(Page 6)
编写你的第一个 Django app,第一部分(Page 6)转载请注明链接地址 Django 2.0.1 官方文档翻译: Django 2.0.1.dev20171223092829 documen ...
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第五部分(Page 10)
编写你的第一个 Django app,第五部分(Page 10)转载请注明链接地址 我们继续建设我们的 Web-poll 应用,本节我们会为它创建一些自动测试. 介绍自动测试 什么是自动测试 测试是简 ...
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第二部分(Page 7)
编写你的第一个 Django app,第二部分(Page 7)转载请注明链接地址 本教程上接前面的教程.我们会配置数据,创建你的第一个 model,并对Django 自动生成的 admin 站点进行快 ...
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第七部分(Page 12)
编写你的第一个 Django app,第七部分(Page 12)转载请注明链接地址 本节教程承接第六部分(page 11)的教程.我们继续开发 web-poll应用,并专注于自定义django的自动生 ...
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第四部分(Page 9)
编写你的第一个 Django app,第四部分(Page 9)转载请注明链接地址 该教程上接前面的第三部分.我们会继续开发 web-poll 应用,并专注于简单的表单处理和简化代码. 写一个简单的表单 ...
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第三部分(Page 8)
编写你的第一个 Django app,第三部分(Page 8)转载请注明链接地址 本页教程接前面的第二部分.我们继续开发 web-poll app,我们会专注于创建公共接口上 -- "视图& ...
- Django 2.0.1 官方文档翻译:编写你的第一个djang补丁(page 15)
编写你的第一个djang补丁(page 15) 介绍 有兴趣为社区做一些贡献?可能你发现了django中的一个你想修复的bug,或者你你想添加一个小小的功能. 回馈django就是解决你遇到的问题的最 ...
- Django 2.0.1 官方文档翻译: 高级教程:如何编写可重用的app (page 13)
高级教程:如何编写可重用的app (page 13) 本节教程上接第七部分(Page 12).我们会把我们的 web-poll应用转换成一个独立的python包,你可以在新的项目中重用或者把它分享给其 ...
- Django 2.0.1 官方文档翻译: 如何安装 django (Page 17)
如何安装 django(Page 17) 这一部分可以让你将 Django 运行起来. 安装 Python 作为 python 的一个 web 框架,Django 依赖 Python.Python 的 ...
随机推荐
- 第三个spirit(第十四天)
一 .进度(自习室) 本来十号要开始进行第三次冲刺,不过因为团队很多成员要进行协会和组织的换届,而且团队还换了新 人又加了人进来,所以我们今天才是第三次冲刺的第一天.我们进行了新团队的第一次会议.基于 ...
- 如何快速地编写和运行一个属于自己的 MapReduce 例子程序
大数据的时代, 到处张嘴闭嘴都是Hadoop, MapReduce, 不跟上时代怎么行? 可是对一个hadoop的新手, 写一个属于自己的MapReduce程序还是小有点难度的, 需要建立一个mave ...
- 设置session的过期时间
1)修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了 session.gc_maxlifetime = 86400 然后,重启你的web服务(一般是apa ...
- Python基础【3】:Python中的深浅拷贝解析
深浅拷贝 在研究Python的深浅拷贝区别前需要先弄清楚以下的一些基础概念: 变量--引用--对象(可变对象,不可变对象) 切片(序列化对象)--拷贝(深拷贝,浅拷贝) 我是铺垫~ 一.[变量--引用 ...
- ySQL性能优化的21个最佳实践 和 mysql使用索引
MySQL性能优化的21个最佳实践 和 mysql使用索引 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 ...
- Angular js Radio Button
症状: 绑定一个list radio button 老是只能绑定一行,纠结了很久 ,回家发现 原来是 name 用了同一个 ,坑啊,记录下 免得下次再犯. 之前的代码 <ul> & ...
- Oracle 修改dmp的表空间
1.百度下载 UltraEdit 并安装 2.打开程序,文件-->打开-->找到dmp 文件太大会提示,选择第一个默认,确定 3.按CTRL+H 转成十六进制编辑 4.例如:dmp里面 ...
- Mybatis笔记八:MyBatis中#{}和${}的区别
先给大家介绍下MyBatis中#{}和${}的区别,具体介绍如下: 1. $将传入的数据直接显示生成在sql中 2. #方式能够很大程度防止sql注入. 3.$方式无法防止Sql注入. 4.$方式一般 ...
- 【BZOJ1045】糖果传递(贪心)
[BZOJ1045]糖果传递(贪心) 题面 BZOJ 洛谷 题解 秉承者娱乐精神,我们必须写一个费用流,并且相信信仰跑不过去. 于是写了一个\(zkw\)费用流如下:(您可以无视此份代码) #incl ...
- 【Cf #502 F】The Neutral Zone
本题把$log$化简之后求得就是每个质数$f$前的系数,求系数并不难,难点在于求出所有的质数. 由于空间限制相当苛刻,$3e8$的$bitset$的内存超限,我们考虑所有的除了$2$和$3$以外的质数 ...