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自动生成的管理站点。

快速通道

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

VMware Fusion 中如何复制centos/linux虚拟机

今天想在mac本上,弄几个centos的虚拟机,尝试搭建hadoop的全分布环境。一台台虚拟机安装过去太麻烦了,想直接将现有的centos虚拟机复制几份完事,但...

2567
来自专栏JavaEdge

Redis Cluster流程原理

Redis 3.0之后,节点之间通过去中心化的方式,提供了完整的sharding、replication(复制机制仍使用原有机制,并且具备感知主备的能力)、fa...

1382
来自专栏技术博文

线程,进程和并发

进程 进程是什么?进程是正在执行的程序;进程是正在计算机上执行的程序实例;进程是能分配给处理器并由处理器执行的实体。 进程一般会包括指令集和系统资源集,这里的指...

3777
来自专栏散尽浮华

Centos中yum方式安装java

查看CentOS自带JDK是否已安装。 ◆输入:yum list installed |grep java。 若有自带安装的JDK,如何卸载CentOS系统自带...

2468
来自专栏分布式系统进阶

linux-4.14.11 添加自定义的系统调用

1492
来自专栏游戏杂谈

Flash Builder 4安装SVN插件

flash builder与eclipse类似,装插件的方法也差不多。唯一要注意的时候是选择包的问题,如下图所示:

1353
来自专栏林德熙的博客

dotnet core 2.1 使用阶梯编译

在 dotnet core 2.1 可以使用阶梯编译的方法,从 dotnet framework 开始,在代码的所有方法在第一次进入的时候就需要使用 JIT 进...

761
来自专栏pangguoming

CentOS怎样查看系统信息

一、查看系统版本和核心版本 1 登陆CentOS,启动终端。 ? 2 登陆root帐户,输入 cat  /etc/redhat-relea...

3374
来自专栏加米谷大数据

Kafka内部实现原理

Kafka内部消息是通过Log文件存储的。每个Partition就是一个物理目录,用于存放Log文件,假设一个Topic有两个Partition,那目录名就是t...

1682
来自专栏张伟博客

SVN的备份及恢复

1084

扫码关注云+社区

领取腾讯云代金券