У меня есть проект Django с несколькими приложениями (например, два), и оба нужны разные версии MEDIA_ROOT и MEDIA_URL.Лучший способ переопределить глобальные настройки в Django
В документации указывается, как изменить конкретную настройку, но вот что я сделал.
Я создал project1/settings.py,
# project1/settings.py,
from django.conf import settings
settings.MEDIA_URL = 'foo'
settings.MEDIA_ROOT = 'bar'
Затем я изменил модуль инициализации этого приложения только загрузить модуль:
# project1/__init__.py
import settings
Это работает! Специальный файл настроек успешно переписывает глобальный, выборочно. Мне нравится, что файл настроек проекта находится в логическом месте.
Мой вопрос: имеет ли этот подход какие-либо оговорки, и каков наилучший способ достижения этого?
Дэвид, решения промежуточного программного обеспечения выглядят довольно интересно, но, если можно, я нашел только одно предостережение - если у вас есть управляемые пользовательские команды, которым необходим доступ к настройкам, получение настроек скорее всего, окажется сложным. Помня о своем ответе, я пошел с настройкой переопределений по каждому запросу, от чего-то вроде [PREFIX] _MEDIA_ROOT. Это позволяет мне писать команды manage.py, которые не зависят от каких-либо обманов. –
Это должно сработать. Название mangling не всегда рекомендуется стиль. Вы можете объединить это с вашим оригинальным решением: иметь один MEDIA_ROOT, а затем в project1/__ init__.py создать произвольную переменную conf, например settings.PROJECT_NAME = "project1". Тогда ваша логика просмотра может ссылаться на request.media_root, и вы управляете .py функции могут восстановить путь из settings.MEDIA_ROOT и settings.PROJECT_NAME. –
Андрей "свободный диапазон" Таранченко снова прав –