gpt4 book ai didi

python - Django / python : Understanding paths in django

转载 作者:行者123 更新时间:2023-11-28 22:49:58 25 4
gpt4 key购买 nike

当我查看当前项目中的 settings.py 文件时,我意识到我不太确定 python 在 os.path.join 方面到底发生了什么>

我尝试查找它,但它有点令人困惑 - 当你深入研究时似乎有点深奥。

让我们来看下面的例子:

os.path.join(PROJECT_DIR, 'templates'),

我想从这个例子中回答一些问题:

1。 os.path.join 到底在做什么?究竟加入了什么?

2.什么是PROJECT_DIR? PROJECT_DIR 在哪里设置以及 PROJECT_DIR 本身如何始终指向项目目录,无论其位置如何(在服务器上、本地等)?

现在让我们考虑这个例子(我从 friend 那里拿来的),当我在服务器上运行时(ON_OPENSHIFT 似乎是我的主机)我使用特定的静态目录:

if ON_OPENSHIFT:
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.


)
else:
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/Users/tom/candycode/wsgi/static',

)

我想从这个例子中回答一些问题:

  1. ON_OPENSHIFT 在哪里定义?

  2. 为什么本地(声明的 else 部分)似乎有一个本地目录绝对路径,但为什么不使用某种类型的动态确定路径(比如 os.path.join 东西)?

  3. 为什么ON_OPENSHIFT不需要指定静态目录?它是如何“知道”的?似乎正在发生某种魔法。

最佳答案

为什么要使用 os.path.join():

使用 os.path.join()(和其他 os.path 函数)有助于避免在 Django 项目中设置硬编码路径。这样,您的项目可以在具有不同目录结构的不同计算机上运行,​​而无需重新编码所有内容。在你的电脑上,路径可能是“C:/ApathyBear/Django/mydjango”,而在我的电脑上,路径可能是 “Users/Alex/django”

Django settings.py 和 PROJECT_DIR

在Django项目中通常设置的方式是通过PROJECT_DIR设置。这将类似于 PROJECT_DIR = os.path.dirname(os.path.dirname(__file__)),它将获取当前文件 (settings.py),返回目录名,然后是包含该目录的目录名。它通常会在您的项目根目录中结束(可能会因您的具体设置而异)。

一旦您有了 PROJECT_DIR(或 BASE_DIR,或您将其设置的任何内容),那么从中设置目录是最简单的。使用 os.path.join() 组合您放入的项目。因此,当您放入 os.path.join(PROJECT_DIR, 'templates') 时,如在您的示例中,它会将 templates 添加到您的 PROJECT_DIR。我猜这是 TEMPLATE_DIRS 设置的值,因此您的项目现在知道要在计算机的“C:/ApathyBear/Django/mydjango/templates”或“Users/Alex/django/templates"在我的电脑上。阅读 docsos.path.join() 上了解有关其工作原理的更多详细信息,这在您不知道要运行的操作系统时非常有用。

其他问题

1) ON_OPENSHIFT 可能在 settings.py 文件中较早设置。它应该是一个 bool 值,因此可以是 TrueFalse。此设置表示 如果 ON_OPENSHIFT 设置为 True,则运行这些设置,否则运行其他设置。

这可能是在 settings.py 文件中使用 Environment Variable 调用的.因此,在他的 Openshift 机器上,他可能将环境变量“OPENSHIFT”设置为 True。然后,在他的 settings.py 中,他有类似这样的内容:`ON_OPENSHIFT = os.environ.get('OPENSHIFT', 'False')。这就是说“获取 OPENSHIFT 的环境变量。如果没有,则将其设置为 False。无论结果如何,都将其设置为 ON_OPENSHIFT。

2) 本地版本不需要使用绝对路径。这可能是您 friend 的选择,尽管有点奇怪。

3) 我猜是缺少某些代码。当 ON_OPENSHIFT 为 True 时,STATICFILES_DIRS 中应该有一些内容。没有魔法;当 ON_OPENSHIFT 为 True 时,该设置将不起作用。

关于python - Django / python : Understanding paths in django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23177708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com