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 29 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
Python实现的简单模板引擎功能示例
Sep 02 Python
python多维数组切片方法
Apr 13 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
python 获取当天每个准点时间戳的实例
May 22 Python
python三大神器之fabric使用教程
Jun 10 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
基于python3生成标签云代码解析
Feb 18 Python
Python调用.net动态库实现过程解析
Jun 05 Python
用python计算文件的MD5值
Dec 23 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 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中exec函数和shell_exec函数的区别
2014/08/20 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
python字典get()方法用法分析
2015/04/17 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
python 读取DICOM头文件的实例
2018/05/07 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
深入学习python多线程与GIL
2019/08/26 Python
django自带调试服务器的使用详解
2019/08/29 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
python输入中文的实例方法
2020/09/14 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
网络工程师的自我评价
2013/10/02 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
七年级作文之雪景
2019/11/18 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS