Django | 静态文件处理
Django: 1.8.7
在使用 django
开发中,不可避免的总会遇到静态文件的处理,特别对于前端来说,页面的调试都是依赖静态文件(JS,CSS,Image等等),Django
在静态文件处理这一块做的不错,但不是最优秀,毕竟 Django
只是一个框架而已,更多的业务需要搭配其他工具共同完成,这是后话。
1 文件分类
Django
把静态文件分成了两类:static
和 media
,看了 Django
的文档之后,发现 Django
是按照是否与用户互动来进行区分的
static
: 应用页面需要的(JS, CSS, Image...),这些相对来说是提供给用户的,即这些文件(非严格讲)没有与用户进行互动,开发者产生这些文件为访问用户服务,用户只是单纯的享受应用服务。media
: 用户与应用程序进行交互的文件(用户上传的文件等等)
2 static 文件
Django
使用下面几项来处理 static
文件
STATIC_ROOT
STATIC_URL
STATICFILES_DIRS
STATICFILES_STORAGE
STATICFILES_FINDERS
每一项的具体作用不写了,不懂的可以去翻看官方文档,已经非常清晰。
2.1 开发环境
2.1.1 在自定义的 STATICFILES_DIRS
寻找静态文件
以下是我使用的方式:推荐
保证
django.contrib.staticfiles
在INSTALLED_APPS
中.在
TEMPLATES
配置中添加django.template.context_processors.static
在模板中使用
STATIC_URL
变量,eg:<img src="{{STATIC_URL}}girl.png>
2.1.2 在自定义的 STATIC_ROOT
寻找静态文件
如果你想访问静态文件时,静态文件在 STATIC_ROOT
中寻找
from django.conf import settings
from django.conf.urls.static import staticurlpatterns = [# ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
这种方法不推荐,理由:开发过程中需要不断的执行 ./manage.py collectstatic
2.2 生产环境
生产环境不同开发环境,生产环境下(DEBUG=False
),django.contrib.staticfiles
是不起任何作用的,也就说 django.contrib.staticfiles
只对开发环境(DEBUG=True
)开启
生产环境我们一般都是使用 web服务器
来管理静态文件,管理方法就不写了,不懂可以翻看文档
2.3 CDN 服务
根据配置文件的不同(develop.py production.py
), 设置不同的 STATIC_URL
, 这样很容易结合 CDN
服务,生产环境配置 CDN
,这就扯到高并发去了
2.4 开发环境下默认静态文件服务运行原理
这个原理很简单,因为 django.contrib.staticfiles
在 INSTALLED_APPS
中,Django
自动加载 django.contrib.staticfiles
的 urls.py
, urls.py
源代码如下:
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.views import serveurlpatterns = []def staticfiles_urlpatterns(prefix=None):"""Helper function to return a URL pattern for serving static files."""if prefix is None:prefix = settings.STATIC_URLreturn static(prefix, view=serve)# Only append if urlpatterns are empty
if settings.DEBUG and not urlpatterns:urlpatterns += staticfiles_urlpatterns()
重点是 staticfiles_urlpatterns
这个函数,自动把 settings.STATIC_URL
作为前缀,这些细节我们都不用管,Django
都帮我们搞好了
3 media 文件
media
这里不仅仅包含多媒体文件,包括用户上传的文档
,自定义的css
等等
Django 使用下面几项来处理 media
文件
MEDIA_ROOT
MEDIA_URL
3.1 开发环境
以下是我使用方式
在 TEMPLATES 配置中添加
django.template.context_processors.media
修改
urls.py
入口文件
from django.conf import settings
from django.conf.urls.static import staticurlpatterns = [# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
在模板中直接使用
MEDIA_URL
变量.
<video width="320" height="240" controls="controls"><source src="{{ MEDIA_URL }}movie.ogg" type="video/ogg"><source src="{{ MEDIA_URL }}movie.mp4" type="video/mp4">
</video>
3.2 生产环境
同 2.2
3.3 小结 media
其实严格来说 media
文件都是静态文件,静态文件的打包,版本控制等等需要借助其他工具来完成(前端工程范畴),跟 static
最大的区别是否由用户产生,仅此而已。Django-1.3
之前统一使用 media
进行管理,至于为了还会分出上面类型,不能预测
4 总结
随着现代前端工程的发展,Django
处理静态资源不能满足我们的需要,当下还需要结合其他工具共同完成日益复杂的前端工程。
Django | 静态文件处理相关推荐
- Django静态文件处理、中间件及Admin站点
Django静态文件处理.中间件及Admin站点 文章目录 Django静态文件处理.中间件及Admin站点 一.静态文件 1.简介 2.示例 3.配置静态文件 二.中间件 1.简介 2.示例 3.异 ...
- 解决Django静态文件配置pycharm高光问题
就困扰了我半天的Django静态文件配置问题 更改了setting 文件后 文件参考问题总会高亮让然觉得又错误怪怪的 所以索性直接眼不见心不烦 具体操作如下图: 就这样就可以啦 大功告成! 也顺便提一 ...
- Django 静态文件处理
Django 静态文件处理 前言 配置 staticfiles STATIC_URL STATICFILES_DIRS STATIC_ROOT 前言 Django的静态文件不能像html那样直接放上图 ...
- 各种 django 静态文件的配置总结【待续】
2019独角兽企业重金招聘Python工程师标准>>> 最近在学习django框架的使用,想引用静态css文件,怎么都引用不到,从网搜了好多,大多因为版本问题, 和我现在的使用的da ...
- Django静态文件一瞥
配置 1.在INSTALLED_APPS设置项中确认包含django.contrib.staticfiles 2.增加STATIC_URL设置项,值为一个字符串(路径),必须以'/'结尾 3.在模板中 ...
- Django静态文件配置
本文目的 最近用django开发项目,发现django的静态文件(js,css和img等)配置比较麻烦,开发环境和生产环境的配置还不一样,这里记录一下,作为备忘.我当前使用的版本是django v1. ...
- Django,静态文件配置
保证django能正常运行的几个注意事项 1.保证你的计算机名不能是中文 2.一个pycharm窗口就对应一个项目(工程) 3.文件路径命名尽量不要用中文 4.启动django确保端口不能重复 5.新 ...
- Django静态文件的管理
Django静态资源的路径主要通过STATIC_URL和STATICFILES_DIRS来设置,由此实现不同的管理方式. 管理方式 Django中管理静态资源一般有两种方式. 第一种是在每个应用(ap ...
- doraemon的python(大更新) django静态文件的配置(出错多的地方)
### 12.2 静态文件的使用#### 12.2.1静态文件的配置和使用 settings.py```python STATIC_URL = '/static/' #别名 STATICFILES_D ...
- Django/静态文件/apps配置/模型/数据库/shell
一.debug和basedir 1.debug 2.basedir 当前文件的上一级的上一级绝对路径:/root/PycharmProjects/bookmanage # Build paths in ...
最新文章
- python怎么打开文档_python打开怎么运行
- c语言100以内加减乘除,一百以内的加减乘除法游戏....
- [platform]linux platform device/driver(三)--Platform Device和Platform_driver注册过程之代码对比...
- python将object转换为float_将pandas系列类型从object转换为float64
- java HashMap实现原理
- AngularJS操作DOM——angular.element
- 从零开始学keras之使用预训练的卷积神经网络
- 高精度练习(hdoj1042)
- 使用ThreadLocal和AtomicInteger将int属性改为线程安全的计数器
- 工作中常用的Linux命令(不断更新中)
- torch.cat()函数用法
- 电商OTA:如何评估社区产品?
- [美国]《霍比特人2:史矛革之战》[蓝光1080P.720P.中英双字][2013年奇幻动作]
- python能爬取网站后台数据_如何利用Python爬取网站数据?
- 《软技能-代码之外的生存能力》第四篇——生产力
- AI崛起,阿里的科技孵化力|甲子光年
- [疯狂Java]JDBC:事务管理、中间点、批量更新
- 英特尔发布酷睿系列 | 历史上的今天
- SQLAlchemy 增删改查和基础操作
- java下载m3u8视频,解密并合并ts(二)
热门文章
- Atitit .html5刮刮卡的gui实现总结
- paip.utf-8,unicode编码的本质输出unicode文件原理 python
- paip.python3 的类使用跟python2 的不同之处
- 编译」(compile),与「反编译」(decompile)..哪些语言容易被反编译.
- python生成公共包(SDK)
- 【Rust学习笔记】Rust生命周期参数的详细阐述
- 贝索斯:为什么我们要选择更难的事情去做? |【经纬低调分享】
- (转)基于FPGA技术的FAST行情解码研究
- ​领域模型vs数据模型,应该怎么用?
- 【优化算法】果蝇算法(FOA)【含Matlab源码 1568期】