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开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
python时间序列按频率生成日期的方法
May 14 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
python中调试或排错的五种方法示例
Sep 12 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
解决pyCharm中 module 调用失败的问题
Feb 12 Python
python Shapely使用指南详解
Feb 18 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
python实现A*寻路算法
Jun 13 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安装问题
2006/10/09 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
2019/09/11 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
在Python中使用__slots__方法的详细教程
2015/04/28 Python
python 将md5转为16字节的方法
2018/05/29 Python
python将图片转base64,实现前端显示
2020/01/09 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
化学专业毕业生自荐信
2013/11/15 职场文书
高三语文复习计划
2015/01/19 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android