Ответ 1
На данный момент (Django 1.9 и более ранние версии) {% load staticfiles %}
загружает templateetag static
из приложения Contrib, которое имеет больше возможностей, чем встроенный django.core.static
.
Самое важное отличие состоит в том, что staticfiles
может управлять файлами, хранящимися на CDN, так как его распознаватель может управлять хэшами, например. core.static
добавляет только STATIC_URL
к статическому имени файла, чего недостаточно, если вы обрабатываете свои файлы (например, добавление хеша хдд для очистки кеша между выпусками)
Это различие связано с тем, что управление нелокальными файлами хранилища не предназначалось для включения в основной пакет Django, но по-прежнему полезен для многих разработчиков, которые должны быть реализованы в качестве официального пакета вклада. Поэтому, если вы начали использовать staticfiles
, вам приходилось не забывать использовать его каждый в ваших шаблонах. НО, могут возникнуть некоторые проблемы, например, если с использованием классов Media
, поэтому было принято решение объединить эти два templatetags в один и использовать другое поведение разработчика django.contrib.staticfiles
в его INSTALLED_APPS
или нет.
Из Django 1.10 и далее (также см. билет в Django tracker), {% load static %}
будет использовать staticfiles
внутренне, если он активирован (иначе соблюдайте поведение по умолчанию), а templatetag в пакете contrib будет устаревать, чтобы избежать путаницы.
TL; DR
- До Django 1.10:
staticfiles
загружает templatetags, который может управлять нелокальным хранилищем, гдеstatic
не может (или не легко); - Из Django 1.10:
contrib.staticfiles
приложение все еще существует, но его templatetags будут удалены только{% static %}
templatetags остается; - Из Django 2.0 (я считаю):
{% load staticfiles %}
удален.
В настоящее время используйте staticfiles
templatetags, если вы используете соответствующее приложение Contrib (и знаете, почему вы его используете) до Django 1.10, иначе просто используйте static
.