在Django中,如何确定当前目录(os.getcwd)?

7

我正在使用Python 2.7上的Django 1.7,并注意到我的生产主机(Webfaction)与开发机器(mac os x)之间存在奇怪的行为。

在我的开发机器上,当我通过cmds获取当前工作目录时

import os
dirspot = os.getcwd()
print dirspot

我获取manage.py可执行文件的位置。当我在主机(webfaction)上执行此操作时,根据Django网站是否正在运行以及使用Django shell,我会得到不同的响应。

因此,我的项目(和manage.py)位于:

/home/ross/webapps/djangoarea/myproj

运行中

python manage.py shell

然后我使用上面的os.getcwd()获得
/home/ross/webapps/djangoarea/myproj

但是,如果我将相同的命令放入views.py中并运行我的项目,我会得到以下结果

/home/ross/

我猜可能与使用apache2和wsgi运行django有关,而不是通过manage.py调用它。 有人知道如何使这个一致吗?
提前感谢, 罗斯。
2个回答

10

不确定您想要做什么,但是正如您所发现的那样,os.getcwd()与文件或脚本位置无关,它与执行脚本的位置有关。由于某些原因,这种方法可能不太可靠--例如,在主机上,您的Web进程可能作为与脚本所有者完全不同的用户运行。如果您想获取与您的文件相关的信息,您可能想要使用os.path.abspath(os.path.dirname(__file__))os.path.realpath(path)

https://docs.python.org/3.3/library/os.path.html#os.path.realpath


1
谢谢您的建议。在Django中,“script”是manage.py可执行文件,因此我认为应该有一个一致的结果来指示其位置。然而,没问题-阅读了abspath和realpath,看起来很好,所以使用了它,效果很好。有趣的是,在manage.py shell中,需要引用下划线文件引用,否则它将无法工作。(这里不能输入那个,因为下划线会被删除) :) - RossGK

0

以防某人发现它有用。 您可以使用请求(request)在Django中查看您的工作目录或打印当前工作目录。这种行为似乎适用于rest框架的请求(request),虽然我不确定它是否适用于常规的Django请求(request)。

def some_view(self, request, *args, **kwargs):
    request.META.get('pwd')

我希望它对某人有用

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接