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',
Другие вопросы по тегам