我是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函数链接,那将会很有帮助。
答案 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
。