структура каталогов проекта django и путь к Python

Я с самого начала пытаюсь получить наилучшие настройки для разработки моего проекта django, и у меня возникают проблемы с тем, чтобы все нормально работало в структуре каталогов. Я настроил virtualenv (в данном примере env), чтобы я мог развернуть чистую пустую среду Python для каждого проекта django.

Основная структура выглядит следующим образом:

/env/
    /bin
    /db         <--- Django DB
    /downloads
    /lib
    /static     <--- Where css/imgs/js etc is served from
    /project/   <--- Django root
            /__init__.py
            /settings.py
            /manage.py
            /appsfolder/
                 /appname/
                       /__init__.py
                       /models/
                              /__init__.py
                              /somemodel.py
                       /urls/
                             /__init__.py
                             /someurl.py
                       /views/
                             /__init__.py
                             /someview.py

Это базовая структура; Я хочу, чтобы в каждом проекте был каталог для приложений, и в каждом приложении была отдельная папка для моделей, просмотра и URL-адресов.

Проблема, с которой я столкнулся, связана с путем Python и с тем, как обрабатываются модули.

В приложении я не хочу ссылаться на проект при импорте моделей, т.е. я должен использовать:

import appname.models.modelname

not:

import projectname.models.modelname

, чтобы облегчить повторное использование

В каталоге моделей у меня есть после init .py

from model1 import ModelName1
from model2 import ModelName2
from model3 import ModelName3

__all__ = ['ModelName1', 'ModelName2', 'ModelName3']

Но когда я пытаюсь использовать отдельный файл url (в /appname/urls/urlfile.py) и импортирую модели, подобные следующим:

from appname.models.somemodel import ModelName

Я получаю "модуль" не найдена "ошибка.

while:

from appsfolder.appname.models.somemodel import ModelName

работает нормально

Я полагаю, это связано с тем, что приложение не находится непосредственно на пути python, вместо этого оно находится в подпапке под названием appsfolder, но я не знаю, как это исправить, сохраняя при этом все пригодное для повторного использования и относительное.

Я знаю, что одним из решений является размещение всех приложений прямо по пути python в пакетах сайтов, но мне эта идея не очень нравится, поскольку я думаю, что приложения должны быть в проекте, если вы используете virtualenv

6
задан Timmy O'Mahony 4 October 2010 в 15:54
поделиться