Расположение установленных приложений Django - PullRequest
15 голосов
/ 04 февраля 2009

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

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

Итак, структура проекта:

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

Тогда в настройках Django я поставил это:

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

Это не похоже на работу?

Есть идеи, как поместить все свои приложения в отдельную папку, а не в корень проекта?

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

Ответы [ 3 ]

39 голосов
/ 04 февраля 2009

Убедитесь, что файл '__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 голосов
/ 04 февраля 2009

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

PYTHONPATH="/path/to/your/apps/dir/:$PYTHONPATH"
1 голос
/ 04 февраля 2009

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...