import os.path
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
#os.path.join(BASE_DIR,'templates'),
)
我想知道TEMPLATE_DIRS究竟是什么,所以我在Django shell上运行它,
>>> import os.path
>>> os.path.dirname(__file__)
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name '__file__' is not defined
为什么这种法律属性在shell中失败?我确实在shell中进行了一些测试并提出了另一个问题:
>>> os.path.dirname(os.path.dirname('/user/name'))
'/'
>>> os.path.dirname('/user/name')
'/user'
>>> B = os.path.dirname(os.path.dirname('/user/name'))
>>> os.path.join(B,'template')
'/template'
带有评论os.path.join(BASE_DIR,'templates')
的代码与'/templates'
没有关系?
那个根目录不是吗?如果是这样,Django如何在我甚至没有的目录中搜索我的模板文件?
答案 0 :(得分:3)
Python shell中不存在变量__file__
。所以你不能像那样测试价值。
BASE_DIR
值将等于行所处的文件的父文件夹。如果您有一个Django项目并且该行位于/home/xyz/foo/foo/settings.py
,则BASE_DIR
等于/home/xyz/foo
。
为什么? __file__
返回当前文件的绝对路径,此处为settings.py
。之后,你正在拿两次文件夹。第一次它将/home/xyz/foo/foo/
(它删除路径中的文件名),第二次它将采用父文件夹。因此,我们到达项目主文件夹。
此外,您不需要将\\
替换为/
,因为Python os.path
模块知道如何根据您当前的操作系统处理此问题。
总之,您当前的行指向Django项目根目录下的templates/
目录:)