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文件夹与文件的操作实现代码
Jul 13 Python
python学习之编写查询ip程序
Feb 27 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
深入理解Django自定义信号(signals)
Oct 15 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 Python
Python实例方法、类方法、静态方法区别详解
Sep 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
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
Python实时获取cmd的输出
2015/12/13 Python
python学习 流程控制语句详解
2016/06/01 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python装饰器实例大详解
2017/10/25 Python
使用python存储网页上的图片实例
2018/05/22 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
对python模块中多个类的用法详解
2019/01/10 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
幼教个人求职信范文
2013/12/02 职场文书
客户表扬信范文
2014/01/10 职场文书
煤矿安全生产标语
2014/06/06 职场文书
招商银行收入证明
2015/06/17 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL
python turtle绘图
2022/05/04 Python