当我查看当前项目中的settings.py文件时,我意识到我并不确定在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',
)
我想从这个例子中回答一些问题:
ON_OPENSHIFT定义在哪里?
为什么本地(语句的else部分)似乎有一个本地目录absolue路径,但为什么不使用某种类型的动态确定路径(比如os.path.join的东西)?< / p>
为什么ON_OPENSHIFT不需要指定静态目录?它是如何只是&#34;知道&#34;?似乎某种魔法正在发生。
答案 0 :(得分:4)
使用os.path.join()
(和其他os.path
函数)有助于避免在Django项目中设置硬编码路径。这样,您的项目可以在具有不同目录结构的不同计算机上运行,而无需重新编码所有内容。在您的计算机上,路径可能是“C:/ ApathyBear / Django / mydjango”,而在我的计算机上它将是"Users/Alex/django"
通常在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
设置的值,所以你的项目现在知道你的计算机或“Users / Alex / django / templates”中的“C:/ ApathyBear / Django / mydjango / templates” “在我的电脑上。请阅读os.path.join()
上的docs以获取有关其工作原理的详细信息,这在您不知道要运行的操作系统时非常有用。
1)ON_OPENSHIFT可能在settings.py
文件的前面设置。它应该是布尔值,因此True
或False
。此设置表示if ON_OPENSHIFT
设置为True
,然后运行这些设置,否则运行其他设置。
这可能是使用Environment Variable在settings.py
文件中提前调用的。因此,在他的Openshift机器上,他可能将环境变量“OPENSHIFT”设置为True
。然后,在他的settings.py
中,他有类似的东西:`ON_OPENSHIFT = os.environ.get('OPENSHIFT','False')。这是说“获取OPENSHIFT的环境变量。如果没有,则将其设置为False。无论结果如何,将其设置为等于ON_OPENSHIFT。
2)本地版本不需要使用绝对路径。这可能是你朋友的选择,虽然有点奇怪。
3)我猜测有些代码丢失了。当ON_OPENSHIFT为True时,STATICFILES_DIRS
中应该有一些内容。没有魔力;当ON_OPENSHIFT为True时,该设置将不起作用。