Search code examples
pythondjangologgingdjango-settingsdjango-manage.py

Django: how to pass individual setting to manage.py


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.


Solution

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