Was ist der Unterschied zwischen "aus django.conf-Importeinstellungen" und "Importeinstellungen" in einem Django-Projekt?

87

Ich lese, dass die meisten Leute es tun, from django.conf import settingsaber ich verstehe den Unterschied nicht einfach import settingsin einer Django-Projektdatei. Kann jemand den Unterschied erklären?

tzenderman
quelle
django.conf-Einstellungen sind Django-Standardeinstellungen oder "globale" Einstellungen, die Sie möglicherweise mit Ihren eigenen projektbasierten Einstellungen überschreiben.
Jingo
7
Verwenden Sie NIEMALS das zweite Formular. Der erste ist der einzig richtige.
Bruno Desthuilliers
2
Aber warum niemals den zweiten benutzen?
Tzenderman
1
Mögliches Duplikat der Django Importing Settings File
Anto

Antworten:

107

import settingsimportiert normalerweise das erste Python-Modul mit dem Namen, settings.pydas in gefunden sys.pathwurde (in Standard-Django-Setups). Es erlaubt nur den Zugriff auf Ihre Site-definierte Einstellungsdatei, die die Django-Standardeinstellungen ( django.conf.global_settings) überschreibt .

Wenn Sie also versuchen, auf eine gültige Django-Einstellung zuzugreifen, die nicht in Ihrer Einstellungsdatei angegeben ist, wird eine Fehlermeldung angezeigt.

django.conf.settingsist keine Datei, sondern eine Klasse, die eine Abstraktion der Konzepte, Standardeinstellungen und Ihrer standortspezifischen Einstellungen vornimmt. Django führt auch andere Überprüfungen durch, wenn Sie verwenden from django.conf import settings.

Sie finden es auch in den Django-Dokumenten .

Hoffe das hilft.

Julius Caesar
quelle
5
import settingsimportiert den ersten Python - Modul mit dem Namen settings.pygefunden sys.path. Dies ist möglicherweise nicht die "Site Defined Settings File", die in der Umgebungsvariablen "DJANGO_SETTINGS_MODULE" nachgeschlagen wird und nur ein beliebiges Python-Paket oder -Modul sein kann.
Bruno Desthuilliers
@ brunodesthuilliers danke. Ich aktualisiere meine Antwort unter Berücksichtigung Ihrer Korrektur.
Juliocesar
20

from django.conf import settings ist eine bessere Option.

Ich verwende verschiedene Einstellungsdateien für dasselbe Django-Projekt (eine für "live", eine für "dev"), die erste wählt die aus, die ausgeführt wird.

Mansuetus
quelle