Получить абсолютный путь приложения django

Я пишу модульный тест, который должен получить доступ к файлу изображения, который я поместил в каталог" светильники " прямо под каталогом приложения django. Я хочу открыть этот файл изображения в моем тесте, используя относительный путь, который потребует от меня получить абсолютный путь приложения django. Есть ли способ получить абсолютный путь приложения django?

3 ответов


модули Python (включая приложения Django) имеют __file__ атрибут, который сообщает вам местоположение их __init__.py файл в файловой системе, so

import appname
pth = os.path.dirname(appname.__file__)

должны делать то, что вы хотите.

в обычных обстоятельствах, os.path.absname(appname.__path__[0]), но приложения могут изменить это, если они хотят импортировать файлы странным образом.

(Я всегда делаю PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) в своем settings.py, хотя -- упрощает различные настройки, которые должны быть абсолютными путями.)


обычно это то, что я добавляю в свой settings.py файл, чтобы я мог ссылаться на корень проекта.

import os.path

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

этот метод получит каталог любого файла python.


поэтому принятый ответ обычно работает нормально. Однако для

  • пакеты пространства имен с несколькими путями или
  • приложения, которые явно настраивают свои пути в конфигурации,

их предполагаемый путь может не совпадать с