Je suis un débutant travaillant sur le projet Django. Settings.py d'un projet Django contient ces deux lignes:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
Je veux connaître la différence car je pense que les deux pointent vers le même répertoire. Il serait également très utile de fournir des fonctions de liens os.path.
BASE_DIR
Pointe vers le répertoire parent de PROJECT_ROOT
. Vous pouvez réécrire les deux définitions comme suit:
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(PROJECT_ROOT)
car la fonction os.path.dirname()
supprime simplement le dernier segment d'un chemin.
Dans ce qui précède, le nom __file__
Pointe vers le nom de fichier du module actuel, voir modèle de données Python :
__file__
Est le chemin d'accès du fichier à partir duquel le module a été chargé, s'il a été chargé à partir d'un fichier.
Cependant, il peut s'agir d'un chemin relatif, donc la fonction os.path.abspath()
est utilisée pour en faire un chemin absolu avant de supprimer uniquement le nom de fichier et stocker le chemin d'accès complet au répertoire dans lequel le module réside dans PROJECT_ROOT
.