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 ip正则式
May 07 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
分享Python字符串关键点
Dec 13 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
基于python的Paxos算法实现
Jul 03 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
python保存log日志,实现用log日志画图
Dec 24 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
Python如何读取文件中图片格式
Jan 13 Python
聊聊python中的循环遍历
Sep 07 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中目录,文件操作详谈
2007/03/19 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
基于jquery的表头固定的若干方法
2011/01/27 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
JQuery基础语法小结
2015/02/27 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
Python线程的两种编程方式
2015/04/14 Python
Python实现批量修改文件名实例
2015/07/08 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
会计学专业自荐信
2014/06/25 职场文书
开服装店计划书
2014/08/15 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
防暑降温通知书
2015/04/27 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers