追加の設定ファイルを使用せずに、コマンドラインから個々のdjango設定をオーバーライド/定義する方法を探しています。
今必要なのは、管理コマンドを実行するたびにDEBUG設定またはログレベルを設定することです。しかし、何でも設定できるといいですね。
追加の設定ファイルを使用せずに、コマンドラインから個々のdjango設定をオーバーライド/定義する方法を探しています。
今必要なのは、管理コマンドを実行するたびにDEBUG設定またはログレベルを設定することです。しかし、何でも設定できるといいですね。
これが私の解決策です。以下のコードを設定ファイルの最後に追加します。
# Process --set command line option
import sys
# This module can be imported several times,
# check if the option has been retrieved already.
if not hasattr(sys, 'arg_set'):
# Search for the option.
args = filter(lambda arg: arg[:6] == '--set=', sys.argv[1:])
if len(args) > 0:
expr = args[0][6:]
# Remove the option from argument list, because the actual command
# knows nothing about it.
sys.argv.remove(args[0])
else:
# --set is not provided.
expr = ''
# Save option value for future use.
sys.arg_set = expr
# Execute the option value.
exec sys.arg_set
次に、任意のコードを任意の管理コマンドに渡します。
./manage.py runserver --set="DEBUG=True ; TEMPLATE_DEBUG=True"
コマンドにカスタム オプション (ログ レベルなど) を追加できます。ドキュメント
例:
from optparse import make_option
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--delete',
action='store_true',
dest='delete',
default=False,
help='Delete poll instead of closing it'),
)
# ...
settings.py では、次のようにコマンド ライン引数を確認できます。
import sys
# for testing
if "--enable-wiki" in sys.argv:
ENABLE_WIKI = True
sys.argv.remove("--enable-wiki")
使用法:
./manage.py test --enable-wiki MyApp.tests
settings.py が現在の環境をより認識できるようにすることができます。
DEBUG = socket.gethostname().find( 'example.com' ) == -1
テスト時のさまざまなデータベースのオプションは次のとおりです。
'ENGINE': 'sqlite3' if 'test_coverage' in sys.argv else 'django.db.backends.postgresql_psycopg2',