самораскрытие корня проекта django - PullRequest
29 голосов
/ 07 февраля 2011

Хорошо, я вспоминаю, что есть некоторые команды, которые вы можете поместить в файл settings.py, чтобы при переносе проекта django в другой каталог он не работал с foo-bar.

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

Ответы [ 4 ]

84 голосов
/ 07 мая 2013

Архитектура проекта в Джанго

  • корень /

    • app1 /
    • app2 /
    • ...
    • основной /
      • settings.py

Внутри settings.py:

SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) -> дает путь к файлу settings.py: root / main / . Это НЕ КОРЕНЬ ПРОЕКТА

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__)) -> дает корень проекта: root / . Это КОРЕНЬ ПРОЕКТА .

43 голосов
/ 22 августа 2015

Django 1.8 уже включает корневой каталог проекта как BASE_DIR:

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

И вы можете использовать его в своем приложении, импортировав settings:

from django.conf import settings
...
...
print(settings.BASE_DIR)
39 голосов
/ 07 февраля 2011

Возьмите глобальный __file__ и используйте на нем различные функции os.path.

import os.path
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
12 голосов
/ 07 февраля 2011
PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...