Подтвердить что ты не робот

Настройки django manage.py по умолчанию

У меня есть файл settings.py и dev_settings.py, который я использую для переопределения некоторых значений для целей dev. Каждый раз, когда я запускаю команду ./manage.py, я должен указать --settings=whatever.local_settings. Это очень утомительно делать каждый раз, и я пытаюсь найти способ заставить manage.py загружать файл dev_settings.py по умолчанию, так что мне не нужно вводить этот длинный аргумент каждый раз, когда я хочу запустить команда.

Я попытался установить DJANGO_SETTINGS_MODULE, однако, похоже, что manage.py переопределяет эту опцию.

Можно ли это сделать, или я обречен всегда указывать этот аргумент?

4b9b3361

Ответ 1

manage.py устанавливает путь к настройкам для вас, поэтому он игнорирует DJANGO_SETTINGS_MODULE (это в основном просто script, который обтекает django-admin.py).

Есть 2 простых способа исправить вашу проблему:

  • установите DJANGO_SETTINGS_MODULE и используйте django-admin.py для запуска всех команд вместо manage.py. Это даже лучше, если вы используете vitualenv.

  • скопируйте manage.py и назовите его local.py (это имя в моем случае) и переименуйте все settings на dev_settings.

Например:

#!/usr/bin/env python
from django.core.management import execute_manager
import imp

try:
    import settings_local
except ImportError:
    import sys
    sys.stderr.write("Error: Can't find the file 'settings_local.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
    sys.exit(1)

if __name__ == "__main__":
    execute_manager(settings_local)

Теперь вы можете запускать все команды ./local.py.

Ответ 2

Как это обычно делается, у вас есть settings.py со всеми настройками, которые являются общими для сред (например, INSTALLED_APPS и т.д.). Затем у вас есть что-то вроде settings_local.py, которое определяет параметры, специфичные для среды в контексте. Затем вы импортируете settings_local.py в settings.py.

# settings.py

from settings_local import *

settings.py добавляется в репозиторий исходного кода, но settings_local.py нет. (Тем не менее, вы обычно добавляете что-то вроде settings_local.py.example в репо.)

Когда вы сначала переносите свое приложение на производство, например, вы вытаскиваете базу кода из своего репо. Затем скопируйте settings_local.py.example в settings_local.py и внесите необходимые изменения в среду.

Затем у вас есть отдельные файлы settings_local.py в каждой среде, и все это просто работает.

Ответ 3

Вы можете создать псевдоним bash, добавив эти строки в файл .bash_profile:

mymanage()
{
python manage.py $1 --settings=settings_debug
}
alias mng=mymanage

Затем, когда вы запустите эту команду:

mng runserver
Файл

settings_debug.py будет использоваться для настроек.

Ответ 4

Вы можете использовать django-admin.py с этой переменной окружения. Команды взаимозаменяемы, только django-admin.py не переопределяет переменную, которую вы пытаетесь использовать.

Ответ 5

Если файл настроек является общим для всей установки, вы можете просто импортировать его, например.

from settings_local import *

но обычно параметры settings_local изменяются и настраиваются для каждой установки, а моя установка script напрямую копирует файлы на целевые сайты (не беспокоясь о том, что локально, а что нет), что означает, что settings_local может быть перезаписано, чтобы избежать того, что я просто сохраняю settings_local в родительской папке целевого объекта установки и вручную импортировать его в settings.py, например

local_settings_file = os.path.join(prevFolder, "settings_local.py")
if os.path.exists(local_settings_file):
    execfile(local_settings_file)