49

私は 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
4

8 に答える 8

57

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

import os
import sys

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

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

于 2010-10-16T12:09:02.360 に答える
22

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

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

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

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

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

于 2010-10-16T09:45:28.093 に答える
15

BASE_DIRに既に存在する変数を利用してみてはいかがでしょうかsettings.py

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

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

お役に立てれば。

于 2016-09-28T12:17:52.433 に答える
5

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での繰り返しが多くなります。<your_project_dir_name>/apps/DIRSTEMPLATES

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.AppnameConfigappname

于 2020-03-07T19:16:14.697 に答える
1

virtualenv/virtualenvwrapper (少し古いですが、まだ有効です) を使用している場合は、付属のadd2virtualenvコマンドを使用して Python パスを拡張できます。

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

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

add2virtualenv /path/to/apps/dir
于 2014-10-15T05:42:09.633 に答える
0

私の場合、プロジェクトのフォルダー構造は次のとおりです。

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

だから私は私の上のこれらの2行でそれを解決しましたsettings.py:

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

変更する必要はありませんurls.py

于 2020-06-25T18:56:48.910 に答える