2015-08-10 15 views
11

L'ordine delle app in INSTALLED_APPS è importante? Lo chiedo perché ho cartella settings con due settings file: base.py e production.py e ho messo tutte le mie impostazioni in base.py e poi in production.py scrivoImportanza di ordini di app in INSTALLED_APPS

`from base import *` 

e sovrascrivere alcune impostazioni. Anche nel mio base.py faccio in modo che INSTALLED_APPS sia una lista, non una tupla. Perché voglio rimuovere alcune app per le impostazioni di production. In production.py voglio scrivere:

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

In questo caso, l'ordine delle applicazioni in INSTALLED_APPS non è come in base.py

risposta

15

Sì, l'ordine è molto importante.

Da Django documentazione ufficiale sul INSTALLED_APPS settings:

Quando più applicazioni forniscono diverse versioni dello stesso risorse (template, file statico, comandi di gestione, la traduzione), l'applicazione elencato per primo nel INSTALLED_APPS ha la precedenza .

Esempio-1 Modelli:

django.template.loaders.app_directories.Loader

Se questo modello caricatore ATTIVO DjangoTemplates backend nella cornice TEMPLATES o se si sono passati come argomento caricatori a motore , quindi carica i modelli dalle app Django sul filesystem.

Per ogni app in INSTALLED_APPS, il caricatore cerca una sottodirectory di modelli. Se la directory esiste, Django cercherà i modelli lì.

lascia per dire nel mio progetto, ho definito come INSTALLED_APPS:

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

Ora, voglio ottenere il modello some_template.html. Poi get_template('some_template.html') cercherà some_template.html in queste directory, in questo ordine:

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

Sarà quindi utilizzare quella che si trova prima.

Citando da quella section:

L'ordine di INSTALLED_APPS è significativo!

Esempio-2: Traduzioni

Django si applica il seguente algoritmo per le traduzioni scoperta:

  1. Le directory elencate nella LOCALE_PATHS hanno la precedenza più alta, con quelli che appaiono prima che hanno precedenza maggiore di quelli che appaiono più tardi.
  2. Quindi, cerca e utilizza se esiste una directory locale in ciascuna delle app installate elencate in INSTALLED_APPS. Quelli che appaiono per primi hanno una precedenza più alta di quelli che appaiono in seguito.
  3. Infine, la traduzione di base fornita da Django in django/conf/locale viene utilizzata come riserva.

Possiamo vedere che l'ordine è importante anche qui.

Esempio-3 Gestione Comandi:

Da Django 1.7 note di rilascio sul management commands and order of INSTALLED_APPS:

Quando più applicazioni forniscono i comandi di gestione con lo stesso nome, Django carica il comando dall'applicazione che viene prima in INSTALLED_APPS. Le versioni precedenti hanno caricato il comando dall'applicazione che è arrivata per ultima.

Questo porta scoperta dei comandi di gestione in linea con le altre parti di Django che si basano su ordine di INSTALLED_APPS, come file statici, modelli e traduzioni.

+1

ottima risposta ... – Abhishek

Problemi correlati