django manage.py настройки по умолчанию - PullRequest
13 голосов
/ 30 ноября 2011

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

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

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

Ответы [ 5 ]

14 голосов
/ 30 ноября 2011

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

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

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

  2. copy 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 голосов
/ 30 ноября 2011

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

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

Затем при запуске этой команды:

mng runserver

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

2 голосов
/ 30 ноября 2011

Обычно это делается, если у вас есть 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, и все это просто работает.

1 голос
/ 30 ноября 2011

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

from settings_local import *

но обычно settings_local изменяются и настраиваются для каждой установки, и мой сценарий установки напрямую копирует файлы на целевые сайты (не беспокоясь о том, что локально, а что нет), что означает, что 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)
1 голос
/ 30 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...