Мое решение этой проблемы - давать каждый запрос, ВСЕ настройки и обновлять их на лету с помощью промежуточного программного обеспечения, как мне это сделать?
Это довольно просто:
Это промежуточное ПО, которое делает все это
from django.conf import settings
class DumpObject: pass
class Settings(object):
def process_request(self,request):
request.settings = DumpObject()
for setting in dir(settings):
if not setting.startswith('__'):
setattr(request.settings, setting, getattr(settings,setting))
DumpObject как раз там, так что я могу использовать нотацию object.property, это мог быть словарь, но я хотел сохранить некоторое сходство в синтаксисе.
Это предполагает, что ни одно из ваших имен настроек не начинается с __, что является правильным предположением.
Поэтому, если я хочу переопределить определенный параметр, я не сохраняю файл настроек, я делаю это в этом промежуточном программном обеспечении. как это:
class Settings(object):
def process_request(self,request):
request.settings = DumpObject()
for setting in dir(settings):
if not setting.startswith('__'):
setattr(request.settings, setting, getattr(settings,setting))
if 'mydomain' in str(request.host): #this is thanks to django-hosts project
request.settings.GOOGLE_ANALYTICS_ID = '89298393-238'
Конечно, это не учитывает проблему доступа к настройкам по-старому
из django.conf настройки импорта
settings.GOOGLE_ANALYTICS_ID = 'the value in settings.py'
Но это действительно не имеет значения, потому что вы, вероятно, захотите изменить настройки только в контексте наличия доступного объекта запроса.