Веб-приложения обычно требуют различные дополнительные файлы для своей работы (изображения, CSS, Javascript и др.). В Django их принято называть “статическими файлами”(прим.пер. - или “статика”). Django предоставляет приложение django.contrib.staticfiles для работы с ними.
Этот раздел описывает как работать с ними.
Убедитесь что django.contrib.staticfiles добавлено INSTALLED_APPS.
В настройках укажите STATIC_URL, например:
STATIC_URL = '/static/'
В шаблоне или “захардкодьте” URL /static/my_app/myexample.jpg, или лучше использовать тег static для генерация URL-а по указанному относительному пути с использованием бекенда, указанного в STATICFILES_STORAGE (это позволяет легко перенести статические файлы на CDN).
{% load staticfiles %}
<img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>
Сохраните статические файлы в каталоге static вашего приложения. Например my_app/static/my_app/myimage.jpg.
Serving the files
Кроме конфигурации, необходимо настроить раздачу статических файлов.
При разработке это все происходит автоматически, если вы используете runserver и DEBUG равна True (смотрите django.contrib.staticfiles.views.serve()).
Потому что это представление очень неэффективно и, возможно, небезопасно. Оно предназначено только для разработки, и не должно использоваться на боевом сервере.
Способы раздачи статических файлов описаны в разделе Развертывание статических файлов.
Ваш проект, возможно, будет содержать статические файлы, которые не относятся ни к одному из приложений. Настройка STATICFILES_DIRS указывает каталоги, которые проверяются на наличие статических файлов. По умолчанию эта настройка пустая. Например:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
'/var/www/static/',
)
Смотрите описание настройки STATICFILES_FINDERS чтобы узнать, как staticfiles находит файлы.
Static file namespacing
Вы можете добавлять статические файлы непосредственно в каталог my_app/static/ (не создавая подкаталог my_app), но это плохая идея. Django использует первый найденный по имени файл и, если у вас есть файлы с одинаковым названием в разных приложениях, Django не сможет использовать оба. Необходимо как-то указать, какой файл использовать, и самый простой способ – это пространство имен. Просто положите их в каталог с названием приложения(my_app/static/my_app).
При разработке медиа файлы из MEDIA_ROOT можно раздавать используя представление django.contrib.staticfiles.views.serve(). Не используйте его на боевом сервере! Способы раздачи статических файлов описаны в разделе Развертывание статических файлов.
Например, если MEDIA_URL равна ‘/media/’, вы можете добавить следующий код в urls.py:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Примечание
Это представление работает только при включенной отладке и для локальных префиксов (например /static/), а не полных URL-ов (e.g. http://static.example.com/).
django.contrib.staticfiles предоставляет команду, чтобы собрать все статические файлы в одном каталоге.
Укажите в STATIC_ROOT каталог, из которого будут раздаваться статические файлы, например:
STATIC_ROOT = "/var/www/example.com/static/"
Выполните команду collectstatic:
./manage.py collectstatic
Она скопирует все статические файлы в каталоге STATIC_ROOT.
Используйте любой веб-сервер для раздачи этих файлов. Способы раздачи статических файлов описаны в разделе Развертывание статических файлов.
Этот документ описывает основные и самые распостраненные практики. Подробности о настройках, командах, шаблонных тегах и других деталях, включая django.contrib.staticfiles, смотрите раздел о статических файлах.
Mar 30, 2016