Вопрос

I'm looking for a way to override/define some individual django setting from command line without additional settings files.

What I need right now is to set the DEBUG setting or logging level each time when I run my management command. But it would be nice to be able to set anything.

Это было полезно?

Решение

Here is my solution. Add the code below to the bottom of your settings file.

# 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

Then just pass any code to any management command:

./manage.py runserver --set="DEBUG=True ; TEMPLATE_DEBUG=True"

Другие советы

You can add custom option (ex. log level) to your command. Docs

Example:

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

In settings.py you can check for command line arguments, like this:

import sys

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

Usage:

./manage.py test --enable-wiki MyApp.tests

You can make your settings.py more aware of it's current environment:

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

Here's an option for different databases when testing:

'ENGINE': 'sqlite3' if 'test_coverage' in sys.argv else 'django.db.backends.postgresql_psycopg2',
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top