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

我尝试查找它,但是有点混乱-当您深入研究时似乎有点深奥。

因此,让我们看下面的例子:

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

我想从这个例子中回答几点:

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

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

现在让我们考虑这个例子(我从我的朋友那儿拿来的),这使得当我在服务器上运行时(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. 为什么在本地(语句的其他部分)出现一个本地目录绝对路径,但是为什么不使用某种动态确定的路径(例如os.path.join东西)呢?

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

===============>>#1 票数:4 已采纳

为什么要使用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”中查找。 请阅读os.path.join()上的文档 ,以获取有关其工作方式的更多详细信息,当您不知道将要运行的操作系统时,这非常有用。

其他问题

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

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

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

3)我猜缺少一些代码。 应该有什么东西在STATICFILES_DIRS何时ON_OPENSHIFT为True。 没有魔法; 当ON_OPENSHIFT为True时,该设置将不起作用。

  ask by ApathyBear translate from so

未解决问题?本站智能推荐: