Я пытаюсь выполнить модульную настройку моего файла настроек django, чтобы упростить его развертывание и управление несколькими средами.
У меня настроена загрузка файлов в этом порядке ...
- settings.py - настройки, общие для всех
- config / country_XX - параметры, специфичные для установки для этой страны (XX может быть США, CA, AU и т. Д.)
- config / developer_XX - настройки, специфичные для локальной среды разработчика конкретного разработчика
Оба вторичных файла могут изменять значения, установленные в предыдущих файлах
Я считаю, что если 1 загружает 2 и 3, используя обычный
from config.country_XX import *
изменения, которые я делаю в этих файлах, сохраняются.
Если, однако, 1 загружает 2 и 3, используя
__import__()
или
importlib.import_module()
сделанные мной изменения не сохраняются.
Я бы предпочел использовать import_module, потому что он позволяет мне писать более чистый код
import_module('config.country_' + country)
вместо
if country = 'AA':
from config.country_AA import *
elif: country == 'BB'
from config.country_BB import *
...
Вот что у меня есть ... дай мне знать, что ты думаешь.
settings.py
import os
import sys
from django.utils import importlib
DEVELOPMENT = True
DEBUG = False
USES_24_HOUR_TIME = True
country_config = 'config.country_us'
developer_config = 'config.developer_jack'
try:
#importlib.import_module(country_config)
from config.country_us import *
if DEVELOPMENT:
#importlib.import_module(developer_config)
from config.developer_jack import *
except ImportError:
pass
конфиг / country_us.py
import sys
globals().update(vars(sys.modules['settings']))
USES_24_HOUR_TIME = False
конфиг / developer_jack.py
import sys
globals().update(vars(sys.modules['settings']))
DEBUG = True