Django static files разница в работе локально и в сети
world! У меня вопрос уровня новичка. Дело такое: Решил на django 3.2.12 написать маленький website. Создал проект, приложение и html. В настройках settings.py указал все необходимые данные, включая выгрузку с папки static. В саму папку static поставил картинку. Если запускать все локально (127.0.0.1), все работает как "Кока-Кола", но если выгрузить в сеть, то сервер не находит картинку. Я долго мучился и только потом вспомнил про функцию collectstatic. И картинка высветилась. Вопрос следующий: Это что получается, что при каждом пользователе выложивший свое изображение на website'e я буду обязан выполнять collectstatic??? Можно обойтись без этого? Выгрузка изображения происходит не в models.py, а самым обычным способом:
<!DOCTYPE HTML>
<HTML LANG="en">
{% load static %}
<head>
</head>
<body>
<img src={% static "fdog.jpg" %}>
</body>
Я тут посидел и подумал. Понял, что я написал глупость. Когда пользователь выкладывает изображение оно не "вшивается" в шаблон, а содержится где-то и выгружается с помощью models. Логично. Также можно через js. Ок, перезадам вопрос: Для чего нужно collectstatic и почему локально изображения выкладываются без него, а на сервере он необходим? И можно ли обойтись без него?
Дело в том что в производстве django не обслуживает ваши статические файлы, это выполняет ваш вэб-сервер(apche, nginx и т.д)
Вам необходимо указать вашему вэб-серверу где находятся статические файлы.
Также вам необходимо указать STATIC_ROOT
в место STATICFILES_DIRS
, подробней о статике тут