关于django项目中settings.py中的BASE_DIR的分析

首先祝愿天下程序员写的程序永无bug,身体健康,万寿无疆

datetime:2019-11-11 0:30
authore:Benzmjs

说明
	whatfile.py 路径:C:\Users\mjs\Desktop\whatfile.py
	base_dir 路径:C:\Users\mjs\Desktop\base_dir
1.首先在桌面创建一个名为base_dir的django项目

在这里插入图片描述
当前我们项目的绝对路径应该是C:\Users\mjs\Desktop\base_dir

2.打开配置文件

在这里插入图片描述

我们可以看到BASE_DIR=BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
然后我们一层一层的搞清楚究竟BASE_DIR是什么?

2.1首先来看__file__是什么?

我们在桌面上创建一个名为whatfile.py文件,键入内容

import os
print(__file__)

然后在终端运行它,看看打印出来的__file__究竟是什么?

在这里插入图片描述
我们可以看到,__file__就是这个py文件本身的名字,也就是whatfile.py,所以BASE_DIR中的__file__也就是settings.py

搞清楚这个就可以看下一个,os.path.abspath(__file__)究竟会返回什么?

2.1看os.path.abspath(file)是什么?

我们还是再whatfile.py基础上修改从而推断django中的os.path.abspath(file)
我们将whatfile.py中的内容修改为以下内容,然后执行看看运行的结果

import os
print(os.path.abspath(__file__))

运行后的结果为
在这里插入图片描述
我们可以看到这个方法会给我们返回当前这个文件的绝对路径,也就是C:\Users\mjs\Desktop\whatfile.py,由此可知django项目os.path.abspath(__file__)会返回settings.py的绝对路径那么就是C:\Users\mjs\Desktop\base_dir\base_dir

我们来看菜鸟教程中对于os.path.abspath()方法的解释

在这里插入图片描述

2.1那os.path.dirname(os.path.abspath(file))返回的是什么?

通过上面的实验我们已经搞清楚了,django项目base_dir中os.path.abspath(file)返回的是C:\Users\mjs\Desktop\base_dir\base_dir我们将这个路径传入os.path.dirname()方法中看看会返回什么?
我们不妨还像之前一样,修改在桌面上创建的whatfile.py文件,从而推断出django项目base_dir中的结果
我们将whatfile.py内容修改为以下,再来运行

import os
print(os.path.dirname(os.path.abspath(__file__)))

查看效果,
在这里插入图片描述
我们可以看到,os.path.dirname()方法返回的是当前文件所在的目录(也可以理解为上一层,因为whatfile.py的路径是C:\Users\mjs\Desktop\whatfile.py
我们还是来看一下菜鸟教程对于os.path.dirname()的描述
在这里插入图片描述
由此可以得出,django中的os.path.dirname(os.path.abspath(__file__)会得到settings.py所在的上一层目录也就是
在这里插入图片描述
我们可以看到django项目中,BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
所以我们要在刚才基础之上再往上退一层目录,所以BASE_DIR最后的到的结果是
在这里插入图片描述
至此,我们得到了完整的BASE_DIR,总结如下:

1.__file__得到当前文件文件名字

2.os.path.abspath(file)得到当前文件的绝对路径

3.os.path.dirname(os.path.abspath(file))得到当前文件的上一层的文件夹路径

4.os.path.dirname(os.path.dirname(os.path.abspath(file)))得到当前文件的上一次文件夹的上一层文件夹路径

刚开始写博客,如果感觉阅读这篇文章后有收获,请点赞!
如果对这篇文章有什么建议,请大家评论在下方,我们一起学习,共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值