Django sys.path.append для проекта * и * приложения, необходимого для 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'
Если я опускаю строку с "/../djapp/", журнал сообщает my, что "myapp" не может быть импортирован, даже если "djapp.settings" есть. (проверка 'djapp' была импортирована)
Все работает правильно с командой./manage.py. есть __init__
в папке проекта.
Ради тестов, я вижу ту же проблему, используя addsitedir
:
site.addsitedir('/home/user/web/project/')
site.addsitedir('/home/user/web/project/djapp')
2 ответа
Поскольку 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'
Полный макет папки:
host.example.com\
etc\
bin\
project\
logs\
А что у тебя. Таким образом, проект всегда можно назвать проектом:)
Надеюсь, это поможет.
GrtzG
Предположительно у вас есть код в вашем проекте, который делает from myapp import foo
,
Два варианта:
- изменить это на
from djapp.myapp import foo
, что не рекомендуется, так как препятствует переносимости; - только добавить
djapp
в вашем WSGI и установитеDJANGO_SETTINGS_MODULE
чтобы просто'settings'
,