Django/python:理解djang中的路径

2024-04-19 01:35:35 发布

您现在位置:Python中文网/ 问答频道 /正文

当我看着我的设置.py在我当前的项目中,我意识到我不太确定python在os.path.join方面到底发生了什么

我试着去查,但是有点混乱,当你深入研究时,它似乎有点深奥。在

所以我们举个例子:

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

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

1。到底是什么os.path.join操作系统在这里干什么?到底是什么在加入?

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

现在让我们考虑一下这个例子(我从我的朋友那里得到的),当我在服务器上运行时(在OPENSHIFT上似乎是我的主机),我使用一个特定的静态目录:

^{pr2}$

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

  1. 在哪里定义了ON-hu OPENSHIFT?

  2. 为什么在local(语句的其他部分)中似乎有一个本地目录绝对路径,但是为什么不使用某种类型的动态确定路径(比如os.path.join操作系统东西)?

  3. 为什么ON_OPENSHIFT不需要指定静态目录?它怎么会“知道”?好像有什么魔法在发生。


Tags: path项目py服务器目录projectoson
1条回答
网友
1楼 · 发布于 2024-04-19 01:35:35

为什么要用os.path.join操作系统():

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

Django公司设置.py以及项目

在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添加到项目目录中。我猜这是TEMPLATE_DIRS设置的值,所以您的项目现在知道要在“C:/apatheybear/Django/mydjango/templates”中查找您的计算机,或者在我的计算机上的“Users/Alex/Django/templates”。请阅读os.path.join()上的docs,了解它是如何工作的,这在您不知道要运行的操作系统时非常有用。在

其他问题

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

这很可能是在settings.py文件中使用Environment Variable调用的。因此,在他的Openshift机器上,他可能有一个环境变量“Openshift”设置为True。然后,在他的settings.py中,他有如下内容:`ON_OPENSHIFT=操作系统环境获取('OPENSHIFT','False')。这是说“获取OPENSHIFT的环境变量。如果没有,则将其设置为False。不管结果如何,将其设置为ON_OPENSHIFT。在

2)本地版本不需要使用绝对路径。这很可能是你朋友的选择,虽然有点奇怪。在

3)我猜有些代码丢失了。在STATICFILES_DIRS中应该有一些内容,因为ON_OPENSHIFT是真的。没有魔法;当ON_OPENSHIFT为真时,该设置将不起作用。在

相关问题 更多 >