2013-07-02 3 views
0

파이썬 설정 파일을 사용하고 있습니다. 다음과 같은 구조를 가지고 있습니다 :가져 오기를위한 기본 파이썬 서브 모듈을 만드는 방법

settings 
├── base.py 
├── __init__.py 
├── local.py 
├── production.py 
└── staging.py 

설정 모듈은 'settings.production'과 같은 환경 변수에서 선택됩니다. 이것은 훌륭하게 작동하고 이전의 유연하지 않은 settings.py 파일을 대체하여 준비, 제작 및 로컬 사이트에 대한 모든 설정을 멋지게 구성 할 수있게 해줍니다.

호출 코드의 settings = importlib.import_module(os.environ['DJANGO_SETTINGS_MODULE'])은 내 새로운 유연한 설정을 멋진 모듈 인 것처럼 차갑게 처리하며 대부분의 경우 작동합니다.

불행히도 오래된 레거시 코드에는 많은 것들이 있으며 지금은 '가져 오기 설정'을 호출하는데 실패합니다.

유연한 설정 구성의 이점을 잃지 않고 레거시 코드를 지원하려면 import settings.production이나 환경 변수에 지정된 것이 무엇이든 가져 오기 설정이 필요합니다.

예 : 그렇습니다. 이전의 매우 큰 Django 1.3 사이트에서 작업하고 있지만이 질문은 장고와 독립적으로 생각했습니다.

답변

0

이 질문을 쓰는 것은 cathartic입니다. 내가 넣어 설정 모듈의 __init__.py에서

: 여기 내 솔루션입니다

import os 
import importlib 
try: 
    # Do a dynamic 'from DJANGO_SETTINGS_MODULE import *' 
    settings = importlib.import_module(os.environ['DJANGO_SETTINGS_MODULE']) 
    for v in dir(settings): 
     if v.startswith("__"): continue 
     globals()[v] = getattr(settings, v) 
except ImportError, KeyError: 
    # default to the production settings if environment variable not set or improperly specified 
    from production import * 

이 약간의 추가 작업을 수행하지만 멋지게 문제를 해결합니다. 이제 기존 프로그램에 필요한 설정이 적용됩니다.

본질적으로 import settings == import settings.xxx 인 경우 settings.xxx이 환경 변수 DJANGO_SETTINGS_MODULE에 지정됩니다.

다른 사람들이 유용하다고 생각합니다. 새로운 버전의 DJANGO는 당신이 사용하는 응용 프로그램이 설정을 올바르게 임포팅하는 한이 헛소리를 불필요하게 만듭니다.

관련 문제