Подтвердить что ты не робот

Важность заказов приложений в INSTALLED_APPS

Является ли порядок приложений в INSTALLED_APPS важным? Я спрашиваю об этом, потому что у меня есть папка settings с двумя settings файлами: base.py и production.py, и я поместил все мои настройки в base.py, а затем в production.py напишу

 `from base import *` 

и перезаписать некоторые настройки. Также в моем base.py я делаю INSTALLED_APPS для списка, а не для кортежа. Потому что я хочу удалить некоторые приложения для настроек production. В production.py я хочу написать:

NOT_USED_APPS = ['debut_toolbar', 'other_odd_app',]
INSTALLED_APPS = list(set(INSTALLED_APPS) - set(NOT_USED_APPS))

В этом случае порядок приложений в INSTALLED_APPS не похож на base.py

4b9b3361

Ответ 1

Да, порядок очень важен.

Из официальных документов Django в INSTALLED_APPS settings:

Когда несколько приложений предоставляют разные версии одного и того же ресурс (шаблон, статический файл, команда управления, перевод), приложение, указанное первым в INSTALLED_APPS имеет приоритет.

Пример-1 Шаблоны:

django.template.loaders.app_directories.Loader

Если этот загрузчик шаблонов включен в вашем сервере DjangoTemplates в параметре TEMPLATES или если вы передали его как аргумент загрузчика для Engine, он загружает шаблоны из приложений Django в файловой системе.

Для каждого приложения в INSTALLED_APPS загрузчик ищет подкаталог шаблонов. Если каталог существует, Django будет искать там шаблоны.

Давайте скажем в моем проекте, я определил INSTALLED_APPS как:

INSTALLED_APPS = ('myproject.app1', 'myproject.app2')

Теперь я хочу получить шаблон some_template.html. Тогда get_template('some_template.html') будет искать some_template.html в этих каталогах в следующем порядке:

/path/to/myproject/app1/templates/ # checks here first
/path/to/myproject/app2/templates/ # Then checks here

Затем он будет использовать тот, который он находит первым.

Цитата из раздела :

Порядок INSTALLED_APPS значителен!

Пример-2: Переводы

Django применяет следующий алгоритм для обнаружения переводов:

  • Каталоги, перечисленные в LOCALE_PATHS, имеют наивысший приоритет, причем первые появляются с более высоким приоритетом, чем те, которые появляются позже.
  • Затем он ищет и использует, если он существует в каталоге locale в каждом из установленных приложений, перечисленных в INSTALLED_APPS. Те, что появляются сначала, имеют более высокий приоритет, чем те, которые появляются позже.
  • Наконец, базовый перевод Django в django/conf/locale используется как резерв.

Мы видим, что этот порядок важен и здесь.

Команды управления 3-го уровня:

Из примечаний к выпуску Django 1.7 в командах и порядке управления INSTALLED_APPS:

Когда несколько приложений предоставляют команды управления с тем же имя, Django загружает команду из приложения, которое приходит первым в INSTALLED_APPS. Предыдущие версии загрузили команду из последнее приложение.

Это обеспечивает обнаружение команд управления в соответствии с другими частями Django, которые полагаются на порядок INSTALLED_APPS, такие как статические файлы, шаблоны и переводы.