web-dev-qa-db-ja.com

すべての私のDjangoアプリケーションを特定のフォルダーに保持する方法

Djangoプロジェクト、たとえば「project1」があります。アプリケーションの一般的なフォルダー構造は次のとおりです。

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

すべてのアプリケーションを別のフォルダ(たとえば、「apps」)に保持する場合はどうすればよいですか?そのため、その構造は次のようになります。

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

settings.pyに以下を挿入することで、appsフォルダーをpythonパスに追加できます。

import os
import sys

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

そうすれば、プロジェクトルートにあるのと同じように、このフォルダー内のすべてのアプリを使用できます。

47

これは非常に簡単に実行できますが、settings.pyを次のように変更する必要があります。

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

そして、あなたのurls.pyは次のようになります:

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

..アプリの場所を指すようにimportsを変更します

16
Gabi Purcaru

BASE_DIRにすでに存在するsettings.py変数を利用するのはどうですか。

以下を追加するだけです。

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

お役に立てれば。

3
anshuman

Virtualenv/virtualenvwrapperを使用している場合(そして使用する必要がある場合)、付属のadd2virtualenvコマンドを使用して、pythonパス:

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

そのパスをクリップボードにコピーしてから、次のようにします。

add2virtualenv /path/to/apps/dir
1
shacker

アプリフォルダに__init__.py(合計4つのアンダースコア)を追加するだけです。今、あなたはただすることができます

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

Berhard VallantまたはAnshumanの回答のわずかな変形として、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変数がないと、DIRSリストのTEMPLATESリスト内に<your_project_dir_name>/apps/が何度も繰り返されます。

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で指定された短い形式の名前を使用するか、appname.apps.AppnameConfigの長い形式の構文を使用してappnameを置き換えることで一覧表示できます。アプリの名前で。

0
Wayne Lambert