Как сохранить все мои приложения django в определенной папке - PullRequest
33 голосов
/ 16 октября 2010

У меня есть проект Django, скажем, "project1". Типичная структура папок для приложений:

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

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

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

Ответы [ 5 ]

42 голосов
/ 16 октября 2010

Вы можете добавить папку apps в путь к Python, вставив следующую строку в settings.py:

import os
import sys

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

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

12 голосов
/ 16 октября 2010

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

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

И ваш urls.py будет выглядеть так:

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

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

3 голосов
/ 28 сентября 2016

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

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

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

Надеюсь, это поможет.

1 голос
/ 15 октября 2014

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

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

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

add2virtualenv /path/to/apps/dir
0 голосов
/ 06 января 2018

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

urlpatterns = [
        path('polls/',include('apps.polls.urls')),
        path('admin/', admin.site.urls)
]
...