Django 静态文件配置过程详解


Posted in Python onJuly 23, 2019

静态文件配置

概述:

静态文件交由Web服务器处理,Django本身不处理静态文件。简单的处理逻辑如下(以nginx为例):

URI请求 --> 按照Web服务器里面的配置规则先处理,以nginx为例,主要求配置在nginx.conf里的location

--> 如果是静态文件,则由nginx直接处理

--> 如果不是则交由Django处理,Django根据urls.py里面的规则进行匹配

以上是部署到Web服务器后的处理方式,为了便于开发,Django提供了在开发环境的对静态文件的处理机制,方法如下:

static配置:

STATIC主要指的是如css、js、images这样文件:

STATIC_URL = '/static/' # 别名

STATICFILES_DIRS = [
  os.path.join(BASE_DIR, "static"), # 实际名,即实际文件夹的名字
]
# 注意:django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找

media配置:

MEDIA_URL = "/media/"

# 用户上传的文件(针对models.py中的FileField、ImageField字段)保存到哪
MEDIA_ROOT = os.path.join(BASE_DIR, "app名字", "media")
# 配合settings.py里的MEDIA_URL = "/media/"配置,即对外开放了这个接口的权限
from django.conf.urls import url
from django.views.static import serve
from . import settings

urlpatterns = [
  url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
]

ps:

静态文件的处理又包括STATIC和MEDIA两类,这往往容易混淆,在Django里面是这样定义的:

MEDIA:指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。如果你定义

MEDIA_ROOT = c:\temp\media,那么File=models.FileField(upload_to="abc/")#,上传的文件就会被保存到

c:\temp\media\abc
eg:
class blog(models.Model):
Photo = models.ImageField(upload_to="photo")

上传的图片就上传到c:\temp\media\photo,而在模板中要显示该文件,则在settings里面设置MEDIA_ROOT(必须是本地路径的绝对路径),一般是这样写:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/').replace('\\','/')

MEDIA_URL是指从浏览器访问时的地址前缀,举个例子:

MEDIA_ROOT = c:\temp\media\photo
    MEDIA_URL = "/data/"

在开发阶段,media的处理由django处理:

访问http://localhost/data/abc/a.png就是访问c:\temp\media\photo\abc\a.png

在模板里面这样写<img src="/media/abc/a.png">

在部署阶段最大的不同在于你必须让web服务器来处理media文件,因此你必须在web服务器中配置,

以便能让web服务器能访问media文件。

以nginx为例,可以在nginx.conf里面这样:

location ~/media/{
          root/temp/
          break;
        }

具体可以参考如何在nginx部署django的资料。

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

Python 相关文章推荐
Python冒泡排序注意要点实例详解
Sep 09 Python
Python如何实现守护进程的方法示例
Feb 08 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
python 设置输出图像的像素大小方法
Jul 04 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
详解Python是如何实现issubclass的
Jul 24 Python
Django中URL的参数传递的实现
Aug 04 Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 Python
python 连续不等式语法糖实例
Apr 15 Python
python的Jenkins接口调用方式
May 12 Python
一劳永逸彻底解决pip install慢的办法
May 24 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 #Python
pandas通过字典生成dataframe的方法步骤
Jul 23 #Python
Python基于OpenCV实现人脸检测并保存
Jul 23 #Python
python 读取修改pcap包的例子
Jul 23 #Python
Django 用户认证组件使用详解
Jul 23 #Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 #Python
利用Python库Scapy解析pcap文件的方法
Jul 23 #Python
You might like
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
Javascript浅谈之this
2013/12/17 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
python去掉空白行的多种实现代码
2018/03/19 Python
老生常谈python中的重载
2018/11/11 Python
python regex库实例用法总结
2021/01/03 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
html5画布旋转效果示例
2014/01/27 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
PHP面试题及答案二
2015/05/23 面试题
职高毕业生自我鉴定
2013/10/21 职场文书
英文自我鉴定
2013/12/10 职场文书
企业给企业的表扬信
2014/01/13 职场文书
医学生求职自荐书
2014/06/12 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
女方离婚起诉书
2015/05/18 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python