두 솔루션입니다. 둘 다 응용 프로그램에서 settings.py
파일을 설정하고 기본값으로 채울 수 있습니다. 코드에서 하나의 응용 프로그램
사용 from MYAPP import settings
대신 from django.conf import settings
에 대한
구성의 기본 값입니다.
편집 YOURAPP/__init__.py
: 코드에서 전체 프로젝트
사용 from MYPROJECT import settings
대신 from django.conf import settings
에 대한
from django.conf import settings as user_settings
from . import settings as default_settings
class AppSettings:
def __getattr__(self, name):
# If the setting you want is filled by the user, let's use it.
if hasattr(user_settings, name):
return getattr(user_settings, name)
# If the setting you want has a default value, let's use it.
if hasattr(default_settings, name):
return getattr(default_settings, name)
raise AttributeError("'Settings' object has no attribute '%s'" % name)
settings = AppSettings()
구성 기본값.
이 솔루션을 설치하는 것이 더 쉬워 보일 수 있지만,이 좋은 기본 값이 반환되는 것은 아닙니다 MYPROJECT/MYPROJECT/__init__.py
import os, sys, importlib
from . import settings as user_settings
def get_local_apps():
"""Returns the locally installed apps names"""
apps = []
for app in user_settings.INSTALLED_APPS:
path = os.path.join(user_settings.BASE_DIR, app)
if os.path.exists(path) and app != __name__:
apps.append(sys.modules[app])
return apps
class AppSettings:
SETTINGS_MODULE = 'settings'
def __getattr__(self, setting_name):
# If the setting you want is filled by the user, let's use it.
if hasattr(user_settings, setting_name):
return getattr(user_settings, setting_name)
# Let's check every local app loaded by django.
for app in get_local_apps():
module_source = os.path.join(app.__path__[0], "%s.py" % self.SETTINGS_MODULE)
module_binary = os.path.join(app.__path__[0], "%s.pyc" % self.SETTINGS_MODULE)
if os.path.exists(module_source) or os.path.exists(module_binary):
module = importlib.import_module("%s.%s" % (app.__name__, self.SETTINGS_MODULE))
# Let's take the first default value for this setting we can find in any app
if hasattr(module, setting_name):
return getattr(module, setting_name)
raise AttributeError("'Settings' object has no attribute '%s'" % setting_name)
settings = AppSettings()
편집. 여러 응용 프로그램이 해당 settings.py에서 동일한 변수를 선언하면 사용자가 요청한 기본값을 반환 할 응용 프로그램이 무엇인지 알 수 없습니다.
이것은 약하지 않습니까? 'app_settings.py' 전에 import되는 프로젝트'settings.py'에 의존하지 않습니까? – Flimm