2010-10-16 4 views
25

У меня есть проект Django, скажем, «project1». Типичная структура папок для приложений:Как сохранить все мои приложения django в определенной папке

/project1/ 
     /app1/ 
     /app2/ 
     ... 
     __init__.py 
     manage.py 
     settings.py 
     urls.py 

Что я должен делать, если я хочу, чтобы держать все мои применения в какой-то отдельной папке, «приложение», например? Так что структура должна выглядеть следующим образом:

/project/ 
     apps/ 
       app1/ 
       app2/ 
       ... 
     __init__.py 
     manage.py 
     settings.py 
     urls.py 

ответ

36

Вы можете добавить папку apps в свой питона путь, вставив его в вашем settings.py:

import os 
import sys 

PROJECT_ROOT = os.path.dirname(__file__) 
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps')) 

Затем вы можете использовать все приложения в этой папке только таким же образом, как они были в корне проекта!

+2

Если вы спросите меня, это приведет к путанице. –

+1

Это приводит к конфликтам при выполнении тестов. –

12

Вы можете сделать это очень легко, но вы должны изменить settings.py выглядеть следующим образом:

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

И ваш urls.py выглядеть следующим образом:

urlpatterns = patterns('', 
    (r'^app1/',include('apps.app1')),  
    (r'^app2/',include('apps.app2')),  
) 

.. и модифицировать любые import с, чтобы указать место приложения

+0

Хорошо ли это работает с тестовым бегуном? – yellottyellott

+4

Я рекомендую не использовать этот метод, так как это может привести к тому, что другие приложения не смогут ссылаться на ваше собственное приложение, и вам потребуется изменить весь импорт в приложениях, чтобы указать на новый каталог. Я думаю, что правильный путь находится в ответе [Bernhard Vallant] (http://stackoverflow.com/a/3948821/1057102). – sleblanc

+0

Этот же шаблон применяется в проекте [django-oscar] (https://github.com/django-oscar/django-oscar). – Dineshs91

1

Если вы используете virtualenv/virtualenvwrapper (и вы должны быть), вы можете использовать прилагаемое add2virtualenv команду, чтобы увеличить свой путь питона:

mkdir apps 
cd apps 
pwd 
[/path/to/apps/dir] 

Скопируйте этот путь в буфер обмена, а затем:

add2virtualenv /path/to/apps/dir 
2

Как насчет использования переменной BASE_DIR, уже присутствующей в settings.py.

Просто добавьте следующее:

import sys 
sys.path.insert(0, os.path.join('BASE_DIR', 'apps')) 

Надеется, что это помогает.

0

Просто добавьте __init__.py (всего 4 символа подчеркивания) в папку приложений. Теперь вы можете просто сделать

urlpatterns = [ 
     path('polls/',include('apps.polls.urls')), 
     path('admin/', admin.site.urls) 
] 
Смежные вопросы