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放大图片和画方格实现算法
Mar 30 Python
对python3 urllib包与http包的使用详解
May 10 Python
Python设计模式之工厂方法模式实例详解
Jan 18 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
Django web框架使用url path name详解
Apr 29 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 Python
pytest中文文档之编写断言
Sep 12 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
python 绘制场景热力图的示例
Sep 23 Python
Python基础之pandas数据合并
Apr 27 Python
关于Python中进度条的六个实用技巧分享
Apr 05 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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
PDO::getAttribute讲解
2019/01/28 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
顶岗实习接收函
2014/01/09 职场文书
年终考核评语
2014/01/19 职场文书
八一建军节活动方案
2014/02/10 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
水浒传读书笔记
2015/06/25 职场文书