Django sys.path.append用于WSGI下的project*和*app

Ger*_*dJP 6 django django-wsgi

有人可以给我一个指针,说明为什么我需要将我的项目根路径添加到python路径以及我的WSGI文件中的应用程序本身?

项目基础称为"djapp",该应用程序称为"myapp".

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../djapp')

os.environ['DJANGO_SETTINGS_MODULE'] = 'djapp.settings'
Run Code Online (Sandbox Code Playgroud)

如果我省略了带有"/../djapp/"的行,则日志会告诉我'myapp'无法导入,即使'djapp.settings'是.(验证'djapp'已导入)

它可以使用./manage.py命令正常运行.__init__项目文件夹中有一个.

为了测试,我看到同样的问题使用addsitedir:

site.addsitedir('/home/user/web/project/')
site.addsitedir('/home/user/web/project/djapp')
Run Code Online (Sandbox Code Playgroud)

Ger*_*dJP 5

由于djapp(django 项目文件夹)位于也属于部署的父文件夹中,因此我将该djapp文件夹简单地重命名为project. 那么这段代码总是正确的:

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..' )
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../project')

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
Run Code Online (Sandbox Code Playgroud)

完整的文件夹布局是:

host.example.com\
    etc\
    bin\
    project\
    logs\
Run Code Online (Sandbox Code Playgroud)

而你有什么。这样项目就可以一直被称为项目:)

希望有帮助。

格茨G