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多线程编程(八):使用Event实现线程间通信
Apr 05 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
python更改已存在excel文件的方法
May 03 Python
Python线程下使用锁的技巧分享
Sep 13 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
Python测试模块doctest使用解析
Aug 10 Python
python 爬取古诗文存入mysql数据库的方法
Jan 08 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
python基础详解之if循环语句
Apr 24 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
url decode problem 解决方法
2011/12/26 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
angular分页指令操作
2017/01/09 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
Python正规则表达式学习指南
2016/08/02 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
Python中str.join()简单用法示例
2018/03/20 Python
pyshp创建shp点文件的方法
2018/12/31 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
工作个人的自我评价
2014/01/14 职场文书
《雨点》教学反思
2014/02/12 职场文书
会计自荐信范文
2014/03/09 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
食品安全责任书范本
2015/05/09 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
JS实现简单的九宫格抽奖
2022/06/28 Javascript