Django: как передать индивидуальные настройки в manage.py - PullRequest
9 голосов
/ 19 декабря 2011

Я ищу способ переопределить / определить некоторые индивидуальные настройки django из командной строки без дополнительных файлов настроек.

Что мне нужно сейчас, так это устанавливать настройку DEBUG или уровень ведения журнала каждый раз, когда язапустить мою команду управления.Но было бы неплохо иметь возможность установить что угодно.

Ответы [ 3 ]

6 голосов
/ 20 декабря 2011

Вот мое решение.Добавьте приведенный ниже код в конец файла настроек.

# 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"
2 голосов
/ 19 декабря 2011

Вы можете добавить пользовательский параметр (например, уровень журнала) к вашей команде. Документы

Пример:

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'),
        )
    # ...
0 голосов
/ 19 декабря 2011

Вы можете сделать ваши settings.py более осведомленными о текущей среде:

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

Вот вариант для разных баз данных при тестировании:

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