django中静态文件配置static的方法


Posted in Python onMay 20, 2018

环境

  1. centos7
  2. django 1.11
  3. nginx

白话

我们可以使用Template 设置我们的网页,同时,一个完美的网页需要css,js,image 等静态文件的支持。

django中配置方式貌似有不少总,因为很多相关的博客写的方式并不一致,当然这可能是django 的版本不同导致的。

当我们在一个项目下创建一个app后,我们就需要为该app下创建一个static 文件夹来存放相关静态资源。

但创建了多个app后,就需要在多个app下创建static。

这样引入了一个问题,因为,我们的可能用了同一个js文件。分别存放显然是浪费加载时间。

于是在实际部署的时候,我们会将不同app下的static 文件放到一个“合适”的地方。提高资源加载速度,同时也方便管理。

好了,大概就是这个思路,我们下面介绍如何配置

配置

step one

--app
 --migrations
 --static
  --css
  --js
  --image
 --templates
 --__init__.py
 ...

文件结构如上所示,注意,我这里只展示了某app下的结构,而不是整个项目结构,可能你的没有templates这个文件夹,这不要紧,这个是我创建的。

我们最好在static下分类好不同文件夹 css , js,image.(这是推荐的做法)

多个app时,我们就在不同的app 下创建static。(后面我们在讲更合理的方法,这里需要这样做为了你理清步骤)

step two

在settings.py中的STATIC_URL = '/static/'后面添加

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

这个STATIC_ROOT 就是我们最终部署时候需要使用的,解决资源分散的问题。

BASE_DIR 这个变量在settings.py的开始部分被定义,就是项目根目录的目录名。

os.path.join 方法,在项目根目录下新建一个static文件夹。

我看到很多博客这里配置的很多,很乱,让人摸不着头脑。

这个地方完全可以这样配置,加载我们的静态资源。(信我,我可是被很多不负责任的博客坑惨了)

step three

创建文件夹完,配置文件这两步都完成后,我们需要的就是把他放到网页中显示。

在app下新建一个templates,如果有就不用创建

--app
 --migrations
 --static
 --templates
  --appname
   --index.html
 --__init__.py
 ...

大家注意,我并没有直接在templates下直接创建index.html ,而是创建了一个”appname”(就根据你的app来命名这样不会冲突)。并在appname 下创建的index.html。

因为django去找template的时候是吧app下的templates ,存为一个list。如果我们多个app,就可能导致,想访问app2的index,结果却返回了app1的index.html。

index.html 内容

{% load static %} #这个地方引入static这个文件
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>

</head>
<body>
<img src="{% static "image/logo.png" %}" alt="My image"/> #{% static "image/logo.png" %}表示路径

</body>
</html>

这里的#号注释是方便大家理解,并不是html支持的格式,粘贴的时候需要去掉

并在image文件夹下加入一张名为logo.png的图片,因为图片可以直观的判读我们的设置是否生效。

python manage.py runserver 0.0.0.0:9000

访问你的9000端口,查看时候生效。注意我们到这里还未配置nginx.

如果正确,说明路径没问题。

step four

python manage.py collectstatic

该命令收集项目下的静态文件,统一保存到 STATIC_ROOT 就是我们第二步,刚刚配置的。

--project
 --project
 --static
 --app1
 --app2
 --manage.py
 ...

step five

nginx 中配置

location ^~ /static/ {
  root /home/project/;
  }

这个地方 注意配置到static的上级就可以了。

我之前配置成了root /home/project/static 就会一直提示404

在部署的时候,django也建议将settings.py中的debug=True 改为debug=False。以保证安全性。

重新启动nginx ,看看是否成功了呢?

如果成功了,可以将app下的static删掉再试试,理论上也是可以成功的,因为此时我们已经将项目所有的静态文件全都集中到了根目录下的static中。

总结

配置静态文件还是要先了解他是如何生效的,one by one,搞清逻辑。

那样在配置才不会混乱,否则不同的教程只会让人抓狂。

如果找不到相关博客的话,静下心来阅读官方文档。你可以做到的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
CentOS6.5设置Django开发环境
Oct 13 Python
python交互式图形编程实例(三)
Nov 17 Python
python实现控制台打印的方法
Jan 12 Python
Python魔法方法详解
Feb 13 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
基于Python fminunc 的替代方法
Feb 29 Python
python 追踪except信息方式
Apr 25 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 Python
python遍历路径破解表单的示例
Nov 21 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 Python
浅谈Python数学建模之整数规划
Jun 23 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 #Python
Python利用公共键如何对字典列表进行排序详解
May 19 #Python
Python中一些不为人知的基础技巧总结
May 19 #Python
Python + selenium自动化环境搭建的完整步骤
May 19 #Python
pandas中去除指定字符的实例
May 18 #Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 #Python
对pandas replace函数的使用方法小结
May 18 #Python
You might like
PHP 透明水印生成代码
2012/08/27 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Python中的with...as用法介绍
2015/05/28 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
python时间日期操作方法实例小结
2020/02/06 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
财务管理专业毕业生求职信范文
2013/09/21 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
小学教师办公室制度
2014/02/03 职场文书
拓展训练激励口号
2014/06/17 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
销售口号霸气押韵
2015/12/24 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python