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设置Socket代理及实现远程摄像头控制的例子
Nov 13 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
Python如何省略括号方法详解
Mar 21 Python
详细分析Python垃圾回收机制
Jul 01 Python
Python实现播放和录制声音的功能
Aug 12 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
python中time.ctime()实例用法
Feb 03 Python
Pygame Time时间控制的具体使用详解
Nov 17 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
python3.4实现邮件发送功能
2018/05/28 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
详解python polyscope库的安装和例程
2020/11/13 Python
python爬取代理ip的示例
2020/12/18 Python
C#公司笔试题
2014/03/28 面试题
汽修专业自荐信
2014/07/07 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
党员个人总结范文
2015/02/14 职场文书
公司员工体检通知
2015/04/21 职场文书
CSS3实现指纹特效代码
2022/03/17 HTML / CSS
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript