os.path.dirname(os.path.abspath(__ file__))和os.path.dirname(__ file __)

时间:2016-07-16 15:13:35

标签: python django os.path

我是Django Project的初学者。 Django项目的Settings.py文件包含以下两行:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

我想知道区别,因为我认为两者都指向同一目录。如果你能提供一些os.path函数链接,那将会很有帮助。

1 个答案:

答案 0 :(得分:20)

BASE_DIR指向PROJECT_ROOT目录。您可以将这两个定义重写为:

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(PROJECT_ROOT)

因为os.path.dirname() function只是删除了路径的最后一段。

在上面,__file__名称指向当前模块的文件名,请参阅Python datamodel

  

__file__是加载模块的文件的路径名,如果它是从文件加载的。

但是,它可以是相对路径,因此os.path.abspath() function用于将其转换为绝对路径,然后仅删除文件名并将完整路径存储到模块的目录中住在PROJECT_ROOT