Django模板相对路径

时间:2014-05-12 07:35:59

标签: python django templates

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如何在我甚至没有的目录中搜索我的模板文件?

1 个答案:

答案 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/目录:)