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 /" журнал, говорит моему, что 'myapp' не может быть импортирован, даже при том, что 'djapp.settings'. (проверяющий 'djapp' был импортирован),

Это al работает правильно с командой./manage.py. существует a __init__ в папке проекта.

Для пользы тестирований я вижу, что та же проблема использует addsitedir:

site.addsitedir('/home/user/web/project/')
site.addsitedir('/home/user/web/project/djapp')
6
задан Ciro Santilli 新疆改造中心法轮功六四事件 7 May 2016 в 18:29
поделиться

2 ответа

Поскольку djapp (папка проекта django) находится в родительской папке, которая также принадлежит развертыванию, я переименовал папку djapp просто в project . { {1}} Тогда этот код всегда правильный:

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

4
ответ дан 17 December 2019 в 00:07
поделиться

Предположительно, в вашем проекте есть код, который выполняет из myapp import foo.

Два варианта:

  • изменить это на из djapp.myapp import foo, что не рекомендуется, так как это предотвращает переносимость;
  • только добавьте djapp в свой WSGI и установите для DJANGO_SETTINGS_MODULE только 'settings'.
3
ответ дан 17 December 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: