【问题标题】:Difference between os.path.dirname(os.path.abspath(__file__)) and os.path.dirname(__file__)os.path.dirname(os.path.abspath(__file__)) 和 os.path.dirname(__file__) 的区别
【发布时间】:2016-11-19 15:08:52
【问题描述】:

我是 Django 项目的初学者。 一个 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 功能,那将是非常有帮助的。

【问题讨论】:

  • 你都试过并比较了吗?
  • 不,它们没有指向同一个目录。

标签: python django os.path


【解决方案1】:

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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多