Django:如何将个人设置传递给manage.py

时间:2011-12-19 15:18:25

标签: python django logging django-settings django-manage.py

我正在寻找一种方法来从命令行覆盖/定义一些单独的django设置而无需额外的设置文件。

我现在需要的是每次运行管理命令时设置DEBUG设置或日志记录级别。但能够设置任何东西都会很棒。

4 个答案:

答案 0 :(得分:6)

这是我的解决方案。将以下代码添加到设置文件的底部。

# 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"

答案 1 :(得分:2)

您可以在命令中添加自定义选项(例如日志级别)。 Docs

示例:

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'),
        )
    # ...

答案 2 :(得分:0)

在settings.py中,您可以检查命令行参数,例如:

// add this to your success callback
// you can create option either in python or javascript.
success: function(data){ 
      // on success, dynamically append the select drop down list 
      $('#id-categories').append(`<option value =${data.reporter.id}> ${data.reporter.name}</option>`)  
}

用法:

import sys

# for testing
if "--enable-wiki" in sys.argv:
    ENABLE_WIKI = True
    sys.argv.remove("--enable-wiki")

答案 3 :(得分:-1)

您可以让您的settings.py更加了解当前的环境:

DEBUG = socket.gethostname().find( 'example.com' ) == -1

以下是测试时不同数据库的选项:

'ENGINE': 'sqlite3' if 'test_coverage' in sys.argv else 'django.db.backends.postgresql_psycopg2',