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 相关文章推荐
Python3实现发送QQ邮件功能(文本)
Dec 15 Python
Python中实现switch功能实例解析
Jan 11 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
python和flask中返回JSON数据的方法
Mar 26 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
python实现多层感知器
Jan 18 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
python中如何进行连乘计算
May 28 Python
Python加密技术之RSA加密解密的实现
Apr 08 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+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
javascript关于继承解析
2016/05/10 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
python字符串替换示例
2014/04/24 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
如何写出好的Java代码
2014/04/25 面试题
品质主管的岗位职责
2013/12/04 职场文书
企业宣传方案
2014/03/04 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
简历自我评价范文
2019/04/24 职场文书