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
settings.py
に以下を挿入することで、apps
フォルダーをpythonパスに追加できます。
import os
import sys
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
そうすれば、プロジェクトルートにあるのと同じように、このフォルダー内のすべてのアプリを使用できます。
これは非常に簡単に実行できますが、settings.py
を次のように変更する必要があります。
INSTALLED_APPS = (
'apps.app1',
'apps.app2',
# ...
)
そして、あなたのurls.py
は次のようになります:
urlpatterns = patterns('',
(r'^app1/',include('apps.app1')),
(r'^app2/',include('apps.app2')),
)
..アプリの場所を指すようにimport
sを変更します
BASE_DIR
にすでに存在するsettings.py
変数を利用するのはどうですか。
以下を追加するだけです。
import sys
sys.path.insert(0, os.path.join('BASE_DIR', 'apps'))
お役に立てれば。
Virtualenv/virtualenvwrapperを使用している場合(そして使用する必要がある場合)、付属のadd2virtualenv
コマンドを使用して、pythonパス:
mkdir apps
cd apps
pwd
[/path/to/apps/dir]
そのパスをクリップボードにコピーしてから、次のようにします。
add2virtualenv /path/to/apps/dir
アプリフォルダに__init__.py
(合計4つのアンダースコア)を追加するだけです。今、あなたはただすることができます
urlpatterns = [
path('polls/',include('apps.polls.urls')),
path('admin/', admin.site.urls)
]
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
を置き換えることで一覧表示できます。アプリの名前で。