2015-08-10 5 views
11

Ist die Reihenfolge der Apps in INSTALLED_APPS wichtig? Ich frage, weil ich settings Ordner mit zwei settings Dateien haben: base.py und production.py und ich habe alle meine Einstellungen in base.py und dann in production.py schreibenBedeutung von Apps Bestellungen in INSTALLED_APPS

`from base import *` 

und einige Einstellungen überschreiben. Auch in meinem base.py mache ich INSTALLED_APPS zu einer Liste, kein Tupel. Weil ich einige Anwendungen für production Einstellungen entfernen möchte. In production.py möchte ich schreiben:

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

In diesem Fall wird die Reihenfolge der Anwendungen in INSTALLED_APPS nicht base.py

Antwort

15

Ja in mögen, die Reihenfolge ganz wichtig ist.

Von Django offizieller Dokumentation auf INSTALLED_APPS settings:

Wenn mehrere Anwendungen verschiedene Versionen derselben Ressource (Vorlage, statische Datei, Verwaltungsbefehl, Übersetzung) liefern, die ersten in INSTALLED_APPS aufgeführten Anwendung Vorrang hat .

Beispiel-1-Vorlagen:

django.template.loaders.app_directories.Loader

Wenn diese Vorlage loader in Ihrem DjangoTemplates Backend in der TEMPLATES Einstellung aktiviert oder wenn Sie es als ein Lader Argument Motor bestanden haben Dann lädt es Vorlagen aus Django-Apps auf das Dateisystem.

Für jede App in INSTALLED_APPS sucht der Loader nach einem Vorlagen-Unterverzeichnis. Wenn das Verzeichnis existiert, sucht Django dort nach Vorlagen.

Lets in meinem Projekt sagen, habe ich definiert INSTALLED_APPS als:

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

Nun, ich möchte some_template.html die Vorlage erhalten. Dann wird get_template('some_template.html') sucht some_template.html in diesen Verzeichnissen, in dieser Reihenfolge:

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

Es wird dann die man verwenden, die es zuerst findet.

Zitiert aus diesem section:

Die Reihenfolge der INSTALLED_APPS von Bedeutung ist!

Beispiel 2: Übersetzungen

Django gilt den folgenden Algorithmus für die Entdeckung Übersetzungen:

  1. Die aufgelisteten Verzeichnisse in LOCALE_PATHS die höchste Priorität haben, mit denen, erscheinen zuerst höhere Priorität haben als die später erscheinenden.
  2. Dann sucht und verwendet es, wenn es ein Verzeichnis locale in jeder der installierten Anwendungen in INSTALLED_APPS aufgeführt ist. Die zuerst erscheinenden haben eine höhere Priorität als die später erscheinenden.
  3. Schließlich wird die von Django bereitgestellte Basisübersetzung in django/conf/locale als Fallback verwendet.

Wir können sehen, dass Reihenfolge hier auch wichtig ist.

Beispiel-3-Management-Befehle:

Von Django 1.7 Release Notes auf management commands and order of INSTALLED_APPS:

Wenn mehrere Anwendungen Managements bieten mit den gleichen Namen Befehle, lädt Django den Befehl von der Anwendung, die kommt zuerst in INSTALLED_APPS. Frühere Versionen haben den Befehl aus der letzten Anwendung geladen.

Dies bringt Entdeckung von Management-Befehlen in Übereinstimmung mit anderen Teilen von Django, die in der Größenordnung von INSTALLED_APPS verlassen, wie statischen Dateien, Vorlagen und Übersetzungen.

+1

große Antwort ... – Abhishek