Правильный способ импортировать одну константу настроек Django, чтобы избежать затрат на полный импорт настроек? - PullRequest
4 голосов
/ 16 февраля 2012

С Django - Разница между импортом django.conf.settings и настройками импорта , я понимаю принятый способ импорта файла настроек:

from django.conf import settings

Я также прочитал Хорошая или плохая практика в Python: импорт в середине файла . Один из ответов на этот вопрос приведет вас к http://mail.python.org/pipermail/python-list/2001-July/699176.html,, где пункты № 2 и № 4 относятся к моему вопросу.

Допустим, у меня есть огромный файл settings.py, и во всем моем коде Django мне нужно использовать только «низкую» константу, такую ​​как MEDIA_ROOT, в одном редко вызываемом методе. Таким образом, импортировать все настройки кажется невероятно расточительным.py:

from django.conf import settings
...
def foo():
    my_media_root = settings.MEDIA_ROOT

когда я могу просто импортировать нужную константу:

from settings import MEDIA_ROOT
...
def foo():
    my_media_root = MEDIA_ROOT

и, следовательно, избегайте импорта огромного settings.py, тем более что он может даже никогда не использоваться, если my_media_root используется только в одном из многих методов в этом файле. Конечно, это плохая практика, но «версия хорошей практики» этого не работает:

from django.conf.settings import MEDIA_ROOT
...
def foo():
    my_media_root = MEDIA_ROOT

, так как по замыслу вызывает ожидаемое исключение ImportError: No module named settings.

Итак, мой вопрос: как правильно импортировать только одну константу из большого файла settings.py? Заранее спасибо.

1 Ответ

13 голосов
/ 16 февраля 2012

Если это проект Django, то файл настроек уже импортирован, вам просто ничего не нужно импортировать и использовать нужную вам константу.Многократный импорт модуля в Python запускает файл только один раз.

Обычный способ импорта настроек:

from django.conf import settings

Это просто назначает одно имя в вашем модуле (settings) длязначение существующего уже импортированного объекта настроек.Это эквивалентно и имеет примерно то же время выполнения, что и:

settings = sys.modules['django.conf'].settings

Нашли ли вы проблемы, делая это простым способом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...