[Django]-Django project root self discovery

47👍

✅

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__))

109👍

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.

71👍

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)

16👍

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))

Leave a comment