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

Python Django:如何将个人设置传递给manage.py,python,django,logging,django-settings,django-manage.py,Python,Django,Logging,Django Settings,Django Manage.py,我正在寻找一种方法来覆盖/定义命令行中的一些单独的django设置,而不需要额外的设置文件 我现在需要的是在每次运行管理命令时设置调试设置或日志记录级别。但是,能够设置任何内容都很好。您可以在命令中添加自定义选项(例如日志级别) 例如: from optparse import make_option class Command(BaseCommand): option_list = BaseCommand.option_list + ( make_option('--

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

我现在需要的是在每次运行管理命令时设置调试设置或日志记录级别。但是,能够设置任何内容都很好。

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

例如:

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更了解其当前环境:

DEBUG = socket.gethostname().find( 'example.com' ) == -1
测试时,这里有一个针对不同数据库的选项:

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

这是我的解决办法。将下面的代码添加到设置文件的底部

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

在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

谢谢你,丹尼斯。当然可以。但我不想将此选项添加到每个项目中的每个命令中。我正在寻找一些更通用的方法。是否要在每次调用
python manage.py runserver
时设置调试,或者您有自定义命令
python manage.py foo
并且要在其中设置调试?我要为任何命令设置任何设置。如下所示:
/manage.py--set=“DEBUG=True”运行服务器
。也许最简单的方法是在settings.py中执行命令行参数值。但是我希望有一种方法可以完全不修改源代码。谢谢。此方法需要修改我需要重写的任何常量。这不是我想要的。Python中没有常量,任何变量都可以重新绑定。祝你好运,这并不重要。让我们假设设置,而不是常量:)我认为这是唯一可能的方法,因为Django不提供任何用于预处理命令行参数的钩子。我想知道你为什么需要它?嗨,基里尔。谢谢你的评论。我对此不确定。另外,我不喜欢我的解决方案中存储选项值的方式。但我还没有找到更好的方法来保存导入之间的选项。我之所以需要它,是因为这是一种在开发过程中调整任何设置的快速而简单的方法。我可以在不修改设置文件的情况下使用设置。我可以肯定我不会忘记把东西换回来(这有时会造成问题)。它也可以用于生产。可以在cron/celery/etc上调整单个任务的设置。现在我需要的是为我和调试输出运行一些管理命令,并为我的合作伙伴运行一些有用的输出。我觉得我不应该为这种需要更改命令。您可以使用本地设置文件。您很可能已经有了一个数据库登录凭据,因为您在开发和生产中拥有不同的数据库登录凭据。签出不会覆盖此本地设置文件,您也不会忘记其中的设置。@AndrasGyomrey问题是关于命令行参数的。