Я пытаюсь настроить, как приложения интегрируются в общий проект Django. Вопрос в том, как импортировать файлы настроек приложений в проект settings.py, чтобы отделить специфичные настройки приложений от Django. Например:
settings.py
# Django configuration settings...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'cms'
}
# a bunch of other settings
# apps overridings and new settings
from settings_myapp import *
settings_myapp.py
from settings import DATABASES
DATABASES['cms'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'cms'
}
Пока все хорошо. Во время выполнения в настройках Django словарь DATABASE отражает изменения, внесенные приложением. Но что, если приложение хочет добавить имя new во внешнее пространство имен? Добавив NEW_SETTING = True
в myapp_settings
и пару операторов печати в конце settings.py
, я получаю это:
$ python settings.py
{'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'default'}}
Traceback (most recent call last):
File "settings.py", line 8, in <module>
from settings_myapp import *
File "~/settings_myapp.py", line 1, in <module>
from settings import DATABASES
File "~/settings.py", line 10, in <module>
print NEW_SETTING
NameError: name 'NEW_SETTING' is not defined
Как мне избежать кругового импорта и добиться цели?
Я думаю, что мне не хватает некоторой базовой концепции Python, я все равно дал контекст Django, потому что я также был бы признателен за различные решения для достижения цели с разделенными настройками.