2014-09-05 6 views
22

Django новичок здесь. У меня есть проблемы с пониманием смысла:Каков абсолютный путь BASE DIR?

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

и

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static') 
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(BASE_DIR), "static", "static"), 
) 

Что здесь происходит?

Я принимаю это файл «» «это файл settings.py, в котором мы находимся (?), Поэтому BASE_Dir - это две папки из этого ...? то есть с файлом manage.py?

Итак, STATIC_ROOT, будет один? или два? каталоги вверх от BASE_DIR. Будет ли для меня создана STATIC_ROOT FOLDER? Или мне нужно сделать так называемый «статический»?

└── MY_PROJECT 
    ├── BASE_DIR 
    │   ├── MY_APP 
    │   │   └── settings.py 
    │   └── manage.py 
    └── static 

Правильно ли это в этом примере? Тогда какая черта/где черт будет STATIC_FILES_DIRS?

+1

Здесь: https://docs.python.org/2/library/os.path.html?highlight=os.path#os.path.dirname получает путь абзаца базового каталога приложения. Оставайся, я думаю, ты можешь понять. – karthikr

+0

спасибо, а что мне делать с 'os.path.dirname (path)'? –

+0

Он снова получает абсолютный путь к каталогу, который, как я считаю, у вас уже есть в 'BASE_DIR' – karthikr

ответ

16

Если вы хотите знать, где находится base_dir, вы можете распечатать его на терминал, просто добавьте эту строку в settings.py:

print "base dir path", BASE_DIR 

и runserver, чтобы увидеть результаты.

+0

Блестящий! Спасибо, django11. Это решило бы многие из моих проблем. –

+0

В текущей версии Django команда должна быть: print («base dir path», PROJECT_ROOT) – Dror

+0

@Dror Какую версию вы имеете в виду? Я просто проверил его в Django 1.10, и он работает нормально. – Cody

15

Если settings.py сконфигурирован так, ваша файловая система выглядит следующим образом:

└── MY_PROJECT 
    ├── BASE_DIR 
    │ ├── MY_APP 
    │ │ └── settings.py 
    │ └── manage.py 
    └── static  -> STATIC_ROOT 
     └── static -> STATICFILES_DIRS 

Но это не хорошая конфигурация, потому что он смешивает собранную статику и каталог, где Джанго пытается найти статические файлы (например, для их сбора). Может быть, лучше использовать это:

└── MY_PROJECT 
    └── BASE_DIR 
     ├── my_app 
     │ ├── settings.py 
     │ └── static    -> STATICFILES_DIRS 
     ├── manage.py 
     └── deployment 
      ├── collected_static -> STATIC_ROOT 
      └── media    -> MEDIA_ROOT 

# settings.py 
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
STATICFILES_DIRS = (os.path.join(
    BASE_DIR, "my_app", "static"),) 
STATIC_ROOT = os.path.join(
    os.path.dirname(BASE_DIR), "deployment", "collected_static") 
MEDIA_ROOT = os.path.join(
    os.path.dirname(BASE_DIR), "deployment", "media") 

Теперь вы можете легко развернуть статические и мультимедийные файлы, используя ваш любимый веб-сервер (Apache, Nginx и т.д.), указывая его в каталог «развертывания».

Обновление:

Я добавил также Рекомендуемую конфигурацию для MEDIA_ROOT и изменил путь к собранному статическому.

+0

Блестящий! Большое спасибо Норман. Пусть твои чресла будут плодовитыми. –

+0

Эта диаграмма дерева была очень полезна! – BenWillkommen

+0

должен ли MEDIA_ROOT находиться под BASEDIR или под MY_APP? – Dror

14

BASE_DIR - это каталог проектов Django. В том же каталоге, где находится manage.py.

+0

короткий и простой – TheEyesHaveIt

Смежные вопросы