当运行Django/WSGI时,python从哪里获得path的值

当运行Django/WSGI时,python从哪里获得path的值,django,django-wsgi,Django,Django Wsgi,简言之: 视图。py: def display_path(request): import os return HttpResponse("The path is %s" % os.path.abspath(".")) 导致 路径是/var/www 是否可以更改该值,或者它是由httpd/WSGI设置的?您永远不应该依赖当前工作目录作为web应用程序中的特定位置,因为对于不同的托管机制,它将是不同的。所以,甚至不要试图改变当前的工作目录,因为依赖它最终只会导致悲伤 相反,您应该

简言之:

视图。py:

def display_path(request):
    import os
    return HttpResponse("The path is %s" % os.path.abspath("."))
导致

路径是/var/www


是否可以更改该值,或者它是由httpd/WSGI设置的?

您永远不应该依赖当前工作目录作为web应用程序中的特定位置,因为对于不同的托管机制,它将是不同的。所以,甚至不要试图改变当前的工作目录,因为依赖它最终只会导致悲伤

相反,您应该组织代码以使用绝对路径。这需要硬编码,作为配置中某个前缀的后缀添加,或者根据正在执行的代码文件的位置动态计算。在后者中,您将执行以下操作:

import os
here = os.path.dirname(__file__)
path = os.path.join(here, 'relative/path/file.txt')

我认为它与httpd配置有关!因为我刚刚在我的2个环境中进行了测试,两个环境都返回了“path is/”,问题是我使用的是django-mailer(),它假设某个命令总是从命令行运行。如果没有,它会尝试在
/var/www/…
上创建一个线程文件,该文件会意外失败(不,我不会授予apache对
/var/www
的写访问权限)。我的修复方法是修改django mailer的代码,以便您可以手动设置线程文件的路径。