Вот моя ситуация ...
Я пытаюсь динамически сгенерировать кучу вещей в моем файле settings.py на сайте django.
Я настраиваю несколько сайтов (через каркас сайтов) и хочу иметь некоторые значения, которые я подключаю к функции, которая будет генерировать часть файла настроек для каждого сайта.
например:
from universal_settings import *
SITE_NAME = 'First Site'
SITE_SLUG = 'firstsite'
DEFAULT_FROM_EMAIL = '%s <noreply@otakupride.com>' % SITE_NAME
ROOT_URLCONF = 'mysite.urls.%s' % SITE_SLUG
TEMPLATE_DIRS += ( os.path.join(PROJECT_ROOT, "templates", SITE_SLUG), )
очевидно, что DRY - это огромное нарушение того, что последние 3 строки в файле настроек для каждого сайта, на котором запущен этот код. Поэтому я хочу сделать что-то вроде этого
from universal_settings import *
from utils import get_dynamic_settings
SITE_NAME = 'First Site'
SITE_SLUG = 'firstsite'
get_dynamic_settings( locals() )
А вот и функция
# WARNING: THIS CODE DOES NOT WORK!
def get_dynamic_settings(context_dict):
global DEFAULT_FROM_EMAIL
global ROOT_URLCONF
global TEMPLATE_DIRS
DEFAULT_FROM_EMAIL = '%s <noreply@otakupride.com>' % context_dict['SITE_NAME']
ROOT_URLCONF = 'mysite.urls.%s' % context_dict['SITE_SLUG']
TEMPLATE_DIRS += ( os.path.join(PROJECT_ROOT, "templates", context_dict['SITE_SLUG']), )
так что мой вопрос ... как мне добавить вещи в область файла настроек? Похоже, в нем нет объекта dict , доступного для переменных внутри него.
Может быть, я все об этом ошибаюсь? Спасибо за вашу помощь!
PS - мое понимание ключевого слова global
заключается в том, что он сообщает компилятору, что функция означает манипулирование глобальной переменной в ее собственном файле - существует ли такая вещь для файла, которую функция называется?