Quelle est la différence entre `from django.conf import settings` et` import settings` dans un projet Django

92

Je lis ce que la plupart des gens font, from django.conf import settingsmais je ne comprends pas la différence de simplement faire import settingsdans un fichier de projet django. Quelqu'un peut-il expliquer la différence?

Tzenderman
la source
Les paramètres de django.conf sont les paramètres par défaut de django ou "globaux" que vous pouvez remplacer par vos propres paramètres basés sur le projet.
Jingo
7
N'utilisez JAMAIS le deuxième formulaire. Le premier est le seul correct.
bruno desthuilliers
2
Mais pourquoi ne jamais utiliser le second?
tzenderman
1
duplication possible du fichier de paramètres d'importation Django
Anto

Réponses:

111

import settingsimportera le premier module python nommé settings.pytrouvé dans sys.path, généralement (dans les configurations django par défaut). Il permet d'accéder uniquement au fichier de paramètres définis par votre site, qui écrase les paramètres par défaut de django ( django.conf.global_settings).

Donc, si vous essayez d'accéder à un paramètre django valide non spécifié dans votre fichier de paramètres, vous obtiendrez une erreur.

django.conf.settingsn'est pas un fichier mais une classe faisant une abstraction des concepts, des paramètres par défaut et des paramètres spécifiques à votre site. Django effectue également d'autres vérifications lorsque vous utilisez from django.conf import settings.

Vous pouvez également le trouver dans la documentation django .

J'espère que cela t'aides.

Jules César
la source
5
import settingsimportera le premier module python nommé settings.pytrouvé dans sys.path. Cela peut ne pas être le "fichier de paramètres définis par le site", qui est recherché dans la variable d'environnement "DJANGO_SETTINGS_MODULE" et peut être n'importe quel package ou module python.
bruno desthuilliers
@brunodesthuilliers vous remercie. Je mets à jour ma réponse en tenant compte de votre correction.
juliocesar
22

from django.conf import settings est une meilleure option.

J'utilise différents fichiers de paramètres pour le même projet django (un pour "live", un pour "dev"), le premier sélectionnera celui en cours d'exécution.

Mansuetus
la source