Обслуживание статических файлов после развертывания с помощью django 2.2
Я развернул свой сайт на уровне моего хоста, но имги не отображаются. Я сделал python manage.py collectstatic и он скопировал файлы в мой STATIC_ROOT
myprojet/settings.py
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
STATIC_URL = '/static/'
STATIC_ROOT='/home/www/mySite.com/static/'
index.html
{% extends 'layout/base.html' %}
{% load staticfiles %}
{% block content %}
<img src="{% static 'images/icone.png' %}" style="width:350px;height:100">
{% endblock content %}
Я использовал {% load staticfiles %}, так как я использую django 2.2, но изображения не отображаются. Я не знаю, где проблема.
Вам необходимо настроить ваш веб-сервер на обслуживание статических файлов из каталога STATIC_ROOT. Django не обрабатывает статические файлы самостоятельно в продакшене, он делает это только в разработке с помощью команды runserver. В зависимости от вашего веб-сервера, вам нужно добавить некоторые правила, чтобы указать ему, где найти статические файлы и как их обслуживать. Например, если вы используете Apache, вы можете добавить что-то вроде этого в ваш конфигурационный файл:
Alias /static/ /home/www/mySite.com/static/
<Directory /home/www/mySite.com/static>
Require all granted
</Directory>
Это указывает Apache обслуживать любой запрос, начинающийся с /static/ из каталога /home/www/mySite.com/static/, и разрешить доступ к нему. Возможно, вам потребуется перезапустить или перезагрузить веб-сервер, чтобы изменения вступили в силу.
Объяснение:
Статические файлы - это файлы, которые не изменяются динамически, такие как изображения, CSS, JavaScript и т.д. Они обычно хранятся в отдельном каталоге от остальной части проекта Django, и их нужно собрать и скопировать в одно место (STATIC_ROOT) при развертывании проекта. Это облегчает их управление и оптимизацию, а также эффективное обслуживание с помощью веб-сервера.
Django предоставляет некоторые инструменты и настройки для работы со статическими файлами, такие как тег статического шаблона, STATIC_URL, STATICFILES_DIRS и команда collectstatic. Тем не менее, Django не обслуживает статические файлы самостоятельно в продакшене, потому что он не предназначен для работы в качестве веб-сервера, и делать это было бы неэффективно и небезопасно. Вместо этого, он делегирует ответственность за обслуживание статических файлов веб-серверу, такому как Apache, Nginx и т.д. Веб-сервер быстрее и надежнее справляется со статическими файлами, а также может применять некоторые функции, такие как сжатие, кэширование и т.д.
Чтобы настроить веб-сервер на обслуживание статических файлов, необходимо указать ему, где их найти и как их обслуживать. Это зависит от используемого вами веб-сервера, и вам может понадобиться обратиться к его документации для определения конкретного синтаксиса и опций. Однако общая идея заключается в том, чтобы создать псевдоним или местоположение, которое связывает путь URL (например, /static/) с каталогом в файловой системе (например, /home/www/mySite.com/static/). Затем необходимо предоставить доступ и разрешения к этому каталогу и, по желанию, применить некоторые настройки для оптимизации производительности и безопасности обслуживания статических файлов.
Примеры:
Вот несколько примеров того, как настроить различные веб-серверы для обслуживания статических файлов из Django:
- Apache: https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/modwsgi/#serving-files
- Nginx: https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/uwsgi/#serving-files .
- Gunicorn: https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/gunicorn/#serving-static-files
- Героку: https://devcenter.heroku.com/articles/django-assets'