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里使用正则表达式的全匹配功能
Oct 19 Python
python字符串string的内置方法实例详解
May 14 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
keras:model.compile损失函数的用法
Jul 01 Python
Python 防止死锁的方法
Jul 29 Python
什么是Python包的循环导入
Sep 08 Python
python zip()函数的使用示例
Sep 23 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
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
使用微信SDK自定义分享的方法
2019/07/03 Javascript
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
python3生成随机数实例
2014/10/20 Python
Java及python正则表达式详解
2017/12/27 Python
python实现xlsx文件分析详解
2018/01/02 Python
python实现彩票系统
2020/06/28 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
学python安装的软件总结
2019/10/12 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
局域网标准
2016/09/10 面试题
舞蹈毕业生的自我评价
2014/03/05 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
起诉状范本
2015/05/20 职场文书
初二物理教学反思
2016/02/19 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫