django project root self discovery
Solution 1:
The architecture of a project in Django
-
root/
- app1/
- app2/
- ...
- main/
- settings.py
Inside settings.py:
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
-> gives the path of the file settings.py: root/main/. This is NOT THE ROOT OF THE PROJECT
PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))
-> gives the root of the project: root/. This is THE ROOT OF THE PROJECT.
Solution 2:
Django 1.8 already includes the project root directory as BASE_DIR
:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
And you can use it in your app by importing settings
:
from django.conf import settings
...
...
print(settings.BASE_DIR)
Solution 3:
Grab the __file__
global, and use the various functions in os.path
on it.
import os.path
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
Solution 4:
PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))