使用 Python 的 os.path,我如何进入一个目录?

新手上路,请多包涵

我最近将 Django 从 v1.3.1 升级到 v1.4。

在我的老 settings.py 我有

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname( __file__ ), 'templates').replace('\\', '/'),
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

这将指向 /Users/hobbes3/Sites/mysite/templates ,但是 因为 Django v1.4 将项目文件夹移动到与应用程序文件夹相同的级别,所以 我的 settings.py 文件现在位于 /Users/hobbes3/Sites/mysite/mysite/ 而不是 /Users/hobbes3/Sites/mysite/

所以实际上我的问题现在是双重的:

  1. 我如何使用 os.path__file__ 查看上一级目录。换句话说,我想要 /Users/hobbes3/Sites/mysite/mysite/settings.py 找到 /Users/hobbes3/Sites/mysite/templates 使用相对路径。
  2. Should I be keeping the template folder (which has cross-app templates, like admin , registration , etc.) at the project /User/hobbes3/Sites/mysite 水平或 /User/hobbes3/Sites/mysite/mysite

原文由 hobbes3 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 275
2 个回答
os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'templates'))

至于templates文件夹应该放在哪里,我不知道,因为Django 1.4刚出来,我还没有看。您可能应该在 SE 上问另一个问题来解决该问题。

您还可以使用 normpath 来清理路径,而不是 abspath 。但是,在这种情况下,Django 需要绝对路径而不是相对路径。

对于跨平台兼容性,请使用 os.pardir 而不是 '..'

原文由 forivall 发布,翻译遵循 CC BY-SA 3.0 许可协议

要获取文件的文件夹,只需使用:

 os.path.dirname(path)

要获取文件夹,只需再次使用 os.path.dirname

 os.path.dirname(os.path.dirname(path))

您可能想检查 __file__ 是否是符号链接:

 if os.path.islink(__file__): path = os.readlink (__file__)

原文由 jassinm 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题