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中列表和元祖的使用方法
Apr 25 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
python读取文本中的坐标方法
Oct 14 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
python tkinter实现界面切换的示例代码
Jun 14 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
python基于socket函数实现端口扫描
May 28 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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
浅析Yii2中GridView常见操作
2016/04/22 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
jquery.validate使用攻略 第一部
2010/07/01 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
json数据的列循环示例
2013/09/06 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
一些Solaris面试题
2015/12/22 面试题
简短的公司员工自我评价分享
2013/11/13 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
《长征》教学反思
2014/04/27 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
检讨书范文1000字
2015/01/28 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python