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从ftp下载数据保存实例
Nov 20 Python
简单介绍Python中的try和finally和with方法
May 05 Python
使用python绘制常用的图表
Aug 27 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
python代理工具mitmproxy使用指南
Jul 04 Python
解决python3 安装不了PIL的问题
Aug 16 Python
python实现高斯判别分析算法的例子
Dec 09 Python
python如何通过pyqt5实现进度条
Jan 20 Python
提高python代码运行效率的一些建议
Sep 29 Python
如何使用Pytorch搭建模型
Oct 26 Python
python 制作网站筛选工具(附源码)
Jan 21 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中str_replace函数使用小结
2008/10/11 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
接收键盘指令的脚本
2006/06/26 Javascript
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
pygame学习笔记(5):游戏精灵
2015/04/15 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
python实现最小二乘法线性拟合
2019/07/19 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
顺丰快递Java软件工程师面试题
2015/07/31 面试题
研发工程师岗位职责
2014/04/28 职场文书
远程培训的心得体会
2014/09/01 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
Windows7下FTP搭建图文教程
2022/08/05 Servers