__import__ или import_module против импорта при объединении нескольких файлов настроек django - PullRequest
3 голосов
/ 21 марта 2012

Я пытаюсь выполнить модульную настройку моего файла настроек django, чтобы упростить его развертывание и управление несколькими средами.

У меня настроена загрузка файлов в этом порядке ...

  1. settings.py - настройки, общие для всех
  2. config / country_XX - параметры, специфичные для установки для этой страны (XX может быть США, CA, AU и т. Д.)
  3. 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
...