Динамически создавать Django переменные настроек - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть два файла настроек:

  • settings_commons.py, который содержит переменные, общие для всех экземпляров
  • settings_prod.py prod instance-speci c vars
  • settings_dev.py dev instance-speci c vars

У меня есть несколько переменных, которые задают пути для журналов, загрузок и т. Д. c. Эти пути зависят от MNT_DATA_DIR, который отличается для каждого экземпляра (dev, prod, et c). Я не хочу, чтобы эти пути дублировались в каждом файле настроек экземпляра.

Что я делаю в settings_commons.py

MNT_DATA_DIR_DEPENDENT_VARS = (
    ('FILE_DIR', os.path.join('{MNT_DATA_DIR}', "file_root")),
    ('LOG_DIR', os.path.join('{MNT_DATA_DIR}', "logs", "lab")),
    ...
)

FILE_DIR_DEPENDENT_VARS = (
    ('IMPORT_DATA_DIR', os.path.join('{FILE_DIR}', "Import")),
    ('REMOTE_DATA_DIR', '{FILE_DIR}'),
    ...
)

А затем в файле, указанном экземпляром c file

from .settings_commons import *

MNT_DATA_DIR = '/mnt/dir'

for item in MNT_DATA_DIR_DEPENDENT_VARS:
    globals()[item[0]] = item[1].format(MNT_DATA_DIR=MNT_DATA_DIR)

for item in FILE_DIR_DEPENDENT_VARS:
    globals()[item[0]] = item[1].format(FILE_DIR=FILE_DIR)

Может ли такой подход вызвать какие-либо проблемы? Как насчет использования setattr() вместо globals()? Это правильный подход?

...