关于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)))得到当前文件的上一次文件夹的上一层文件夹路径

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

Django项目中,`settings.py` 文件是项目的配置文件,其中有一个名为 `TEMPLATES` 的设置项,它包含了模板引擎的详细配置。如果你想要更改默认的字符集(即 `CHARSET` 或者 `ENCODING`),你需要关注 `OPTIONS` 子结构下的 `context_processors` 参数,这是一个列表,最后一个元素通常是用于提供通用变量到所有模板的上下文处理器。 找到类似这样的配置段落: ```python TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ # ...其他处理器... 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'your_custom_processor', # 如果有自定义处理器 ], }, }, ] ``` 然后,在 `OPTIONS` 中,找到 `loaders` 对象(虽然这可能已经隐式设置了字符集,但在一些旧版本的Django中可能存在),添加 `charset` 参数: ```python 'OPTIONS': { 'loaders': [ ('django.template.loaders.cached.Loader', [ 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', # 可能存在的字符集加载器,如: 'django.template.loaders.encoded.Loader', # 这里添加 charset 设置 ]), # ... ], 'context_processors': [...], }, 'LOADER_CONTEXT_PROCESSORS': [ # ... 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', # ...其他选项... ], ``` 这里,`'django.template.loaders.encoded.Loader'` 需要传入一个额外的参数 `{'encoding': 'GBK'}` 来指定编码。记得在导入 `encoded.Loader` 之前加上 `'from django.template.loader import *'`。 完成这些设置后,Django会使用你在 `settings.py` 中配置的字符集处理模板文件内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值