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 相关文章推荐
Python2中的raw_input() 与 input()
Jun 12 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
python 接收处理外带的参数方法
Dec 03 Python
pandas中的series数据类型详解
Jul 06 Python
新手入门Python编程的8个实用建议
Jul 12 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
Python远程开发环境部署与调试过程图解
Dec 09 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
pycharm如何实现跨目录调用文件
Feb 28 Python
Python自动化之UnitTest框架实战记录
Sep 08 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分页详细讲解(有实例)
2013/10/30 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
jquery 常用操作方法
2010/01/28 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
js运动事件函数详解
2016/10/21 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
Vuex模块化应用实践示例
2020/02/03 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
python网络编程之数据传输UDP实例分析
2015/05/20 Python
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
python连接mysql实例分享
2016/10/09 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
python和c语言哪个更适合初学者
2020/06/22 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
html5读取本地文件示例代码
2014/04/22 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
重阳节登山活动方案
2014/02/03 职场文书
大学生党员自我批评
2014/02/14 职场文书
食品安全标语
2014/06/07 职场文书
纪录片信仰观后感
2015/06/08 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
Python实现视频自动打码的示例代码
2022/04/08 Python
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers