Расположение установленных приложений Django

Я - опытный программист PHP, использующий Django в первый раз, и я думаю, что это невероятно!

У меня есть проект с множеством приложений, поэтому я хотел сгруппировать их в папку приложений.

Таким образом, структура проекта:

/project/
/project/apps/
/project/apps/app1/
/project/apps/app2

Затем в настройках Django я добавил следующее:

INSTALLED_APPS = (
    'project.apps.app1',
    'project.apps.app2',
)

Это не работает?

Любые идеи о том, как вы можете поместить все ваши приложения в отдельную папку, а не в корневой каталог проекта?

Большое спасибо.

Ответы

Ответ 1

Убедитесь, что файл __init__.py находится в каталоге ваших приложений, если он там не будет распознан как часть пакета.

Итак, каждая из папок здесь должна содержать файл "__init__.py". (пустое нормально).

/project/
/project/apps/
/project/apps/app1/
/project/apps/app2

Затем, пока ваша корневая папка "module" находится в вашем PYTHONPATH, вы сможете импортировать из своих приложений.

Здесь представлена ​​документация о пути поиска python для удовольствия от чтения:

http://docs.python.org/install/index.html#modifying-python-s-search-path

И приятное простое объяснение того, что __init__.py файл для:

http://effbot.org/pyfaq/what-is-init-py-used-for.htm

Ответ 2

Пока ваши приложения находятся в вашем PYTHONPATH, все должно работать. Попробуйте установить эту переменную среды в папку, содержащую ваши приложения.

PYTHONPATH="/path/to/your/apps/dir/:$PYTHONPATH"

Ответ 3

В верхнем уровне urls.py (также названном в settings.py) должен быть доступен простой оператор import для получения ваших приложений.

Работает ли import project.apps.app1.urls? Если нет, то ваш PYTHONPATH настроен неправильно, или вы не установили свой проект в каталог Python site-packages.

Я предлагаю использовать переменную среды PYTHONPATH вместо установки в пакеты сайта. Приложения Django (для меня, во всяком случае) кажутся более удобными для управления, когда внешние сайты-пакеты.

Мы делаем следующее:

  • Проекты Django входят в /opt/project/.

  • PYTHONPATH включает /opt/project.

  • Наш settings.py использует apps.this и apps.that (обратите внимание, что часть project этого имени является частью PYTHONPATH, а не частью импорта.