2017-03-23 11 views
2

django startapp apiを使用してAPIと呼ばれるアプリケーションを作成しました。私はその後、settings.py(app/settings.py)に私のメインアプリケーション(app)から、このアプリをロード:サブモジュール用Django - INSTALLED_APPS

INSTALLED_APPS = [ 
    ... 
    'api.apps.ApiConfig', 
    ... 
] 

これは素晴らしい作品!次に、apiフォルダ(api/settings.py)にsettings.pyファイルを作成しました。私はrest_frameworkと呼ばれるモジュールをこのサブモジュール内からロードしたいと考えています(再利用性のためです)。だから、api/settings.pyファイルには以下が含まれています。私は、アプリケーションを実行すると

INSTALLED_APPS = [ 
    'rest_framework' 
] 

rest_frameworkモジュールは、しかし、ロードされません。私は(app/settings.py用)次の回避策を見つけました:

from api.settings import INSTALLED_APPS as API_APPS 
INSTALLED_APPS += API_APPS 

私は、これはすべてのサブモジュールの主な用途でINSTALLED_APPSをロードする最良の方法はないと思います。すべてのサブモジュールをロードするより良い方法がありますかINSTALLED_APPS

+0

2個のアプリは完全に独立している必要があります。あなたが望むものではないかもしれない依存関係を混ぜているように見えます。 –

+0

正確です。これが私が尋ねた理由です:-)。 'api'アプリケーションは' rest_framework'に依存し、メインアプリケーション( 'app')は' api'アプリケーションに依存します。どうすれば 'app'の' settings.py'に 'api'の依存関係をロードする必要はないのですか? –

+4

'api.apps.ApiConfig''(ひどいCamelCase)と' 'rest_framework''の両方を' INSTALLED_APPS'に追加する必要があることを明確にする方法であなたの 'api'アプリケーションを文書化するべきです。再利用可能なアプリやフレームワークがたくさんあり、正しく動作するには複数のアプリを 'INSTALLED_APPS'に追加する必要があります。 – schwobaseggl

答えて

0

アプリごとの設定に適した場所は、AppConfigクラスです。デフォルトのアプリケーション設定は、適切なデフォルトを持つことができ、デフォルトのアプリ設定をサブクラス化することでカスタマイズできます。ほとんどのDjangoアプリはsettings.pyを持っていないので、app/settings.pyを追加すると、他のDjango開発者にとっては珍しいように見えます。

個人的には、私はあなたのアプリの設定(またはapp/settings.py)で巧妙なことをやろうとしません。プロジェクトの設定ファイルを見るときにどのアプリケーションがインストールされているのかが不明確で、微妙なエラーが発生する可能性があります。

Djangoのデバッグツールバーは、コアDjango開発者から寄せられた非常に人気のあるDjangoアプリケーションで、removed automatic setupは「問題がある」ため、1.6になりました。

関連する問題