структура каталогов проекта 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

нет:

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

Я получаю сообщение об ошибке «модуль не найден».

пока:

from appsfolder.appname.models.somemodel import ModelName

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

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

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


person Timmy O'Mahony    schedule 04.10.2010    source источник


Ответы (1)


Вы можете поместить следующее в свой settings.py, чтобы добавить свой appsfolder к вашему PYTHONPATH:

import os
import sys

PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'appsfolder'))
person Bernhard Vallant    schedule 04.10.2010
comment
Это пригодилось для разделения моей собственной папки appviews в корне проекта. У них есть один для templates, почему бы и не просмотров? - person Droogans; 16.03.2012