Самая важная часть вопроса в теме.
Мне интересно, какой тег лучше всего подходит для этого случая. Более того... Я нашел код, который также использует settings.STATIC_URL, включенный {{STATIC_URL}} в шаблоны.
Я немного смущен.
Самая важная часть вопроса в теме.
Мне интересно, какой тег лучше всего подходит для этого случая. Более того... Я нашел код, который также использует settings.STATIC_URL, включенный {{STATIC_URL}} в шаблоны.
Я немного смущен.
 Встроенный тег static template "ссылку [s] на статические файлы, сохраненные в STATIC_ROOT".
  staticfiles contrib app static тег шаблона "использует сконфигурированное хранилище STATICFILES_STORAGE для создания полного URL-адреса для данного относительного пути", который "особенно полезно при использовании нелокального хранилища для развертывания файлов".
В встроенной документации тега шаблона static (связанной выше) есть примечание, в котором говорится использовать тег шаблона staticfiles contrib app static ", если у вас есть расширенный прецедент, например использование облачной службы для обслуживания статических файлов", и он дает следующий пример:
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
Вы можете использовать {% load staticfiles %}, а не {% load static from staticfiles %}, если хотите, но последний более явный.
Я не знаю, какая разница должна быть, но я нашел разницу в использовании (используя django 1.9.1, запущенный через apache, wsgi на Python 3.4). В моем приложении у меня есть несколько изображений в ImageFields в базе данных. Если я использую такой код в своем шаблоне:
<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
 тогда, если я использую {% load static %}, django будет иметь значение TypeError (Cannot mix str and non-str arguments). Вероятно, это связано с тем, что object.image не является строкой, а ImageField, которая преобразуется в строку на более позднем этапе. Однако, если вы используете {% load staticfiles %}, такая ошибка не возникает.
К сожалению, я обнаружил эту разницу, потратив часы на отладку проблемы. Мне удалось найти обходное решение для использования первого варианта, а именно добавить метод строкового преобразователя для объекта следующим образом:
#image string
def image_str(self):
    return str(self.image)
Надеемся, что это знание будет полезным для кого-то.
Обратитесь к docs, где есть хорошее объяснение.
Фактически тег шаблона {% static %} знает расположение STATICFILE_STORAGE
Как говорят документы:
{% load static from staticfiles %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" /> The previous example is equal to calling the url method of an instance of STATICFILES_STORAGE with "images/hi.jpg".Это особенно полезно при использовании не локального хранилища для развертывать файлы, как описано в разделе Обслуживание статических файлов из облака службы или CDN.
Если вы хотите получить статический URL-адрес без его отображения, вы можете используйте несколько другой вызов:
{% load static from staticfiles %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}" alt="Hi!" />
Надеюсь, что это поможет!
 {% load staticfiles %} очень полезно, когда вы используете разные хранилища, такие как S3, а затем конвертируете в URL-адреса S3