Зачем передавать строку, которая представляет объект, а не передавать объект? - PullRequest
1 голос
/ 27 мая 2011

Код ниже от Django settings.py.Поскольку все в Python является объектом, почему бы просто не передать установленные приложения как кортеж объектов:

INSTALLED_APPS = (
  django.contrib.auth,
  django.contrib.contenttypes,
.....

Есть ли веская причина, почему они делают это:

INSTALLED_APPS = (
  'django.contrib.auth',
  'django.contrib.contenttypes',
.....

вместо?

Я новичок в Python и Django, поэтому не судите меня слишком сильно, пожалуйста.

Ответы [ 2 ]

6 голосов
/ 27 мая 2011

Передача имени модуля или класса в виде строки - типичное решение, позволяющее избежать циклической ошибки импорта.
Например, если файл настроек содержит import myapp.models, а myapp.models содержит from django.conf import settings, это приведет к циклическому импорту.

1 голос
/ 27 мая 2011

Сначала вам нужно будет import django и так, чтобы оно заработало, иначе у вас будет ошибка.

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