クイックフィックス
を実行したときだけ消音するにはmanage.py
、次の行を の後に追加しimport sys
ます。
# ...
import sys
if not sys.warnoptions:
sys.warnoptions += [None]
# ...
WSGI サーバー (つまり Apache) からもサイレントにしたい場合は、更新your_project/wsgi.py
して の後に次の行を追加しますimport os
。
# ...
import os
import sys
if not sys.warnoptions:
sys.warnoptions += [None]
# ...
説明
これが機能する理由は、django.utils.log.configure_logging()
それを処理する方法によるものです。
def configure_logging(logging_config, logging_settings):
if not sys.warnoptions:
# Route warnings through python logging
logging.captureWarnings(True)
# RemovedInNextVersionWarning is a subclass of DeprecationWarning which
# is hidden by default, hence we force the "default" behavior
warnings.simplefilter("default", RemovedInNextVersionWarning)
# ...
の一部として起動プロセスの早い段階で意図的に呼び出されdjango.setup()
ます。これにより、スタックのさらに下にあるエラーを黙らせる前にエラーが発生した理由が説明されます。
新しい要素を追加して、ロジックをバイパスしてsys.warnoptions
強制的に評価するようにします。これは、モジュールによってロードされたときに Python の起動中にのみ使用されるTrue
ため、無害です。warnings
RemovedInNextVersionWarning
RemovedInDjango18Warning
Django 1.7の単なるエイリアスです。RemovedInDjango19Warning
これは1.8に設定されており、将来のバージョンでも同様です。このコードは、このタイプのDeprecationWarning
.
コマンド ライン メソッド
通常、pythonを呼び出すときの引数sys.warnoptions
に基づいて、python の起動時に設定されることに注意してください。したがって、開発サーバーを使用するときに警告を黙らせる簡単な方法は. これにはファイルの変更は必要ありませんが、単なるプレースホルダーであり、有効な警告アクションではないため、起動時に無害な警告が 1 つ表示されます。-W
python -W123 manage.py runserver
123
別の方法は ですが、これは ではない関心のあるものを含め、すべてpython -Wi::DeprecationWarning manage.py runserver
を無視します。 DeprecationWarning
RemovedInDjango18Warning