Domanda

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.

È stato utile?

Soluzione

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"

Altri suggerimenti

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',
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top