2

from django.conf import global_settingsを使用してdjangoのデフォルト設定をインポートし、追加したいと思いますMIDDLEWARE_CLASSES。自分の設定でこれを行うのが好きなので、追加したものとデフォルトのものを把握できます。したがって、私の設定ファイルは次のようになります。

from django.conf import global_settings
...
global_settings.MIDDLEWARE_CLASSES += (
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    )

この戦略は、 などの他の設定でも機能しますTEMPLATE_CONTEXT_PROCESSORSが、試してみると機能しません。print global_settings.MIDDLEWARE_CLASSESDebug Toolbar Middlwareを追加した後に追加しましたが、これは使用時の出力でしたrunserver

('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware')
('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware')
Validating models...

0 errors found
Django version 1.3.1, using settings 'canada.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

スクロールすると、設定が 2 回実行されていることがわかります。2回目は設定を再度追加します。どうすればこれを防ぐことができますか? 設定でハードコーディングする必要がMIDDLEWARE_CLASSESありますか?また、デフォルトのdjango設定をインポートしない正当な理由はありますか?

4

1 に答える 1

2

global_settings 変数を直接変更することはお勧めできません。Django コアは、settings.py で定義したすべてのものをマージするため、多くの操作を行います。そのため、変更が上書きされる可能性があります。

変数を global_settings から直接派生させたい場合は、ローカル コピーを作成し、それを変更します。例:

GLOBAL_MIDDLEWARE_CLASSES = global_settings.MIDDLEWARE_CLASSES
LOCAL_MIDDLEWARE_CLASSES = ('debug_toolbar.middleware.DebugToolbarMiddleware',)

MIDDLEWARE_CLASSES = GLOBAL_MIDDLEWARE_CLASSES + LOCAL_MIDDLEWARE_CLASSES

次に Django は、MIDDLEWARE_CLASSES の新しいバージョンを定義したことを検出し、適切なプロセスを使用してそれを global_middleware に挿入します。

そうは言っても、個人的には、すべてのミドルウェア クラスを表示して、必要に応じて再配置できるようにしたいと考えています。選択した方法を使用すると、Django のリビジョン間で何が変わるかわかりません!

于 2011-11-25T06:34:44.410 に答える