Почему не подгружаются статические файлы в режиме разработки?
Потому-что в режиме runserver, джанго отдаёт статику из папок(их несколько может быть) указанных в константе
STATICFILES_DIRS. И работает это в режиме дебага. То есть когда у вас
DEBUG = True.
На продакшене же, на рабочем сервере, у вас во первых должен быть включён
DEBUG = False. А пути до статики вы указываете не в самой джанге, а в вашем
nginx/apache веб-сервере. И там хоть какой путь может быть, хоть даже не в папке проекта. Главное указать в настройках веб-сервера, слушать путь который вы указали в константе STATIC_URL. Ибо джанго будет отдавать пути до файлов в ответах сервера, которые вы указываете в константах MEDIA_URL и STATIC_URL.
Выше вам подсказал Александр, для чего нужны эти две папки. Для выполнения консольной команды
collectstatic, после которой вся статика из
STATICFILES_DIRS, самой джангой соберётся и переместится в папку
STATIC_ROOT. По этому и ругается, что дескать "папка разработки" и "папка итоговой сборки", не может быть одной и той же.
Как вариант, костыльный, если вы всё-равно не используете collectstatic, для сборки статики, то можете в settings.py, закомментировать строку с
STATIC_ROOT или
STATICFILES_DIRS. А в файл urls.py, добавить строки:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Но это, имхо, именно костыль.