如何将我的所有django应用程序保存在特定文件夹中

时间:2010-10-16 09:42:14

标签: python django django-apps

我有一个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

8 个答案:

答案 0 :(得分:42)

您可以在apps中插入以下内容,将settings.py文件夹添加到您的python路径中:

import os
import sys

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

然后您可以像使用项目根目录一样使用此文件夹中的所有应用程序!

答案 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以指向应用位置

答案 2 :(得分:3)

如何使用BASE_DIR中已存在的settings.py变量。

只需添加以下内容:

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

希望这有帮助。

答案 3 :(得分:1)

如果你正在使用virtualenv / virtualenvwrapper(你应该这样做),你可以使用包含的add2virtualenv命令来扩充你的python路径:

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

将该路径复制到剪贴板,然后:

add2virtualenv /path/to/apps/dir

答案 4 :(得分:0)

只需在您的apps文件夹中添加__init__.py(总共4个下划线)。现在你可以做到

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

答案 5 :(得分:0)

作为Berhard VallantAnshuman答案的略有变化,这是放置在settings.py中的替代代码段

import os
import sys  # Insert this line

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Insert the two lines below
APPS_DIR = os.path.join(BASE_DIR, '<your_project_dir_name>/apps/')
sys.path.insert(0, APPS_DIR)

以这种方式执行此操作具有以下好处,即模板目录更加简洁,如下所示。如果没有APPS_DIR变量,则<your_project_dir_name>/apps/列表的DIRS列表中的TEMPLATES将会重新定位。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(APPS_DIR, '<app_name>/templates/<app_name>'),
            os.path.join(APPS_DIR, '<app_name>/templates/<app_name>'),
            ...
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

您可以使用INSTALLED_APPS中给出的简短名称或使用apps.py的长格式语法替换{{1 }}和您应用的名称。

答案 6 :(得分:0)

就我而言,我的项目文件夹结构如下:

/project/
   /apps/
      /app1/
      /app2/
   /src/
      /settings.py
      ...

所以我在settings.py上用这两行代码解决了这个问题:

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

无需更改urls.py

答案 7 :(得分:0)

通过使用 manage.py

# Fisrt create apps folder and appname subfolder
mkdir -p ./apps/<appname>

# Then create new app
python manage.py <appname> ./apps/<appname>