Django sys.путь.добавить для проекта *и * приложение, необходимое под 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.настройки " есть. (проверка 'djapp' была импортирована)

это al работает правильно с. /manage.py командование. есть а __init__ в папке проекта.

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

site.addsitedir('/home/user/web/project/')
site.addsitedir('/home/user/web/project/djapp')

2 ответов


С djapp (папка проекта django) находится в родительской папке, которая также принадлежит развертыванию, которое я переименовал просто 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\

и что у вас есть. Таким образом, проект всегда можно назвать project:)

надеюсь, что это поможет.

GrtzG


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

два варианта:

  • изменить на from djapp.myapp import foo, что не рекомендуется, так как предотвращает мобильность;
  • только добавить djapp в вашем WSGI и установите DJANGO_SETTINGS_MODULE просто 'settings'.