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

14 投票
4 回答
7389 浏览
提问于 2025-04-17 08:39

我想找一种方法,可以在命令行中覆盖或定义一些单独的 Django 设置,而不需要额外的设置文件。

我现在需要做的是每次运行我的管理命令时,设置 DEBUG 选项或者日志级别。不过,如果能设置其他任何选项就更好了。

4 个回答

2

在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
2

你可以给你的命令添加自定义选项(比如,日志级别)。文档链接

举个例子:

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

这是我的解决方案。把下面的代码加到你设置文件的最底部。

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

撰写回答