编写你的第一个Django应用,第6部分

本教程上接教程 5。 我们已经建立一个测试过的网页投票应用,现在我们将添加一张样式表和一张图片。

除了由服务器生成的HTML文件外,网页应用一般需要提供其它必要的文件 —— 比如图片文件、JavaScript脚本和CSS样式表 —— 来为用户呈现出一个完整的网站。 在Django中,我们将这些文件称为“静态文件”。

对于小型项目,这不是个大问题,因为你可以将它们放在你的网页服务器可以访问到的地方。 然而,在大一点的项目中 —— 尤其是那些由多个应用组成的项目 —— 处理每个应用提供的多个静态文件集合开始变得很难。

这正是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 静态文件查找器的工作方式,你可以通过polls/style.css在Django中访问这个静态文件,与你如何访问模板的路径类似。

静态文件的命名空间

与模板类似,我们可以家那个我们的静态文件直接放在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 %} 模板标签。{% 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):

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 和静态文件参考。部署静态文件讨论如何在真实的服务器上使用静态文件。

下一步?

新手教程到此结束。 在这期间,你可能想要在如何查看文档中了解文档的结构和查找相关信息方法。

如果你熟悉Python 打包的技术,并且对如何将投票应用制作成一个“可重用的应用”感兴趣,请看高级教程:如何编写可重用的应用。

译者:Django 文档协作翻译小组,原文:Part 6: Static files。

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

django 1.8 官方文档翻译: 1-2-6 编写你的第一个Django应用,第6部分相关推荐

  1. Django官方教程(十二)【编写你的第一个 Django 补丁】

    为 Django 编写你的第一个补丁 介绍 对向社区回馈有点兴趣?也许你发现了 Django 的一个 bug,然后你想修复它,或者你想为 Django 添加一些功能. 回馈 Django 本身就是看到 ...

  2. django 1.8 官方文档翻译: 1-2-5 编写你的第一个Django应用,第5部分

    编写你的第一个Django应用,第5部分 本教程上接教程第4部分. 我们已经建立一个网页投票应用,现在我们将为它创建一些自动化测试. 自动化测试简介 什么是自动化测试? 测试是检查你的代码是否正常运行 ...

  3. django 1.8 官方文档翻译: 1-2-4 编写你的第一个Django应用,第4部分

    编写你的第一个 Django 程序 第4部分 本教程上接 教程 第3部分 .我们将 继续开发 Web-poll 应用并且关注在处理简单的窗体和优化我们的代码. 编写一个简单的窗体 让我们把在上一篇教程 ...

  4. django 1.8 官方文档翻译: 1-2-3 编写你的第一个Django应用,第3部分

    编写你的第一个 Django 程序 第3部分 本教程上接 教程 第2部分 .我们将继续 开发 Web-poll 应用并且专注在创建公共界面 – "视图 (views )". 哲理 ...

  5. django 1.8 官方文档翻译: 1-2-2 编写你的第一个Django应用,第2部分

    编写你的第一个 Django 程序 第2部分 本教程上接 教程 第1部分 . 我们将继续开发 Web-poll 应用,并且专注在 Django 的 自动生成的管理网站上. 哲理 为你的员工或客户生成添 ...

  6. django 1.8 官方文档翻译: 1-2-1 编写你的第一个Django应用,第1部分

    编写你的第一个 Django 程序 第1部分 让我们通过例子来学习. 在本教程中,我们将引导您创建一个基本的投票应用. 它将包含两部分: 一个公共网站,可让人们查看投票的结果和让他们进行投票. 一个管 ...

  7. 编写你的第一个 Django 应用,第 3 部分

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. Django视图+模板系统+U ...

  8. 编写你的第一个 Django 应用,第 1 部分

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 编写你的第一个 Django ...

  9. 编写你的第一个 Django 应用,第 2 部分

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 投票应用程序,第 2 部分 我 ...

最新文章

  1. 使用Prometheus+Grafana监控JVM
  2. 文科生自学python要多久_怎么自学python,大概要多久?
  3. 63. Unique Paths II
  4. andorid 第五天 了解xml与应用程序之间的关系
  5. 清明节游戏服务器维护,清明节游戏活动【4月2日--4月16日】
  6. oracle学习笔记---oracle10g 卸载方法
  7. c#+arcAE对图层进行各种渲染操作
  8. win7计算机里没有网络图标,Win7网络图标不见了?找回网络图标的方法
  9. 如何用计算机截部分屏,电脑怎样截长屏_电脑如何长截屏截图-win7之家
  10. 学生网页作业网站设计——中华美德(6页) HTML+CSS+JavaScript web大作业 静态网页
  11. 树莓派 + AWS IoT Greengrass
  12. 价值几千行代码的一键安装开源啦,欢迎各位领导莅临指导(贡献代码)
  13. c语言开发dota,DOTA 6.70C AI简体中文修正版下载
  14. MPS模块化生产加工系统QY-JDYT34
  15. 运营商宽带网速为什么用bit而不用byte
  16. 英伟达 NVIDIA-Tesla-P40 GPU 直透
  17. 2022系统分析师考试---选择题计算题型
  18. Android百度地图雷达效果,地图导航实测:百度地图路线雷达圈粉“老司机”
  19. 大数据----Hive学习(6)----Hive 基本操作4
  20. Java第二天笔记01——变量和运算符

热门文章

  1. PID算法的EXCEL模拟实现
  2. STM32 DMA详解
  3. TCP/IP数据包结构详解
  4. ROS 教程之 vision: 摄像头标定camera calibration
  5. 嵌入式Linux系统编程学习之十七计时器与信号
  6. python函数的嵌套和递归_Python通过递归函数输出嵌套列表元素
  7. 《Reids 设计与实现》第九章 事件
  8. 力扣1175.质数排列
  9. MYSQL的安装基础语法笔记
  10. Spring-IOC推导