#python #django #object
#python #django #объект
Вопрос:
Приведенный ниже код взят из Django
‘s settings.py
. Поскольку все в Python
является объектом, почему бы просто не передать установленные приложения как кортеж объектов:
INSTALLED_APPS = (
django.contrib.auth,
django.contrib.contenttypes,
.....
Есть ли какая-то веская причина, по которой они это делают:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
.....
вместо этого?
Я новичок в Python
и Django
, так что не судите меня слишком строго, пожалуйста.
Ответ №1:
Передача имени модуля или класса в виде строки является типичным решением для избежания циклической ошибки импорта.
Например, если файл настроек содержит import myapp.models
и myapp.models содержит from django.conf import settings
, это приведет к циклическому импорту.
Комментарии:
1. Отлично. Это все объясняет
Ответ №2:
Сначала вам придется import django
и так заставить это работать, иначе у вас будет ошибка.
Комментарии:
1. Итак, это
Django
настройки. Почему не выполняется импортdjango
? Эти модули / библиотеки / классы / что угодно будут загружены в любом случае, верно?2. Потому что это проще для чтения и короче — если у вас длинный список установленных приложений, вам придется импортировать много модулей. Я не пробовал это, но это должно сработать, если Django внутренне способен работать с объектами в INSTALLED_APPS.
3. Например, в MIDDLEWARE_CLASSES есть что-то вроде этого:
( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware' )
— Как вы себе представляете такое количество импорта?4. Как это легче читать?
'django.contrib.something'
vsdjango.contrib.something
? Второе для меня проще.5. Тогда импортировать модуль и включать его не СУХО .