Самая важная часть вопроса в теме.
Мне интересно, какой тег лучше всего подходит для какого случая. Кроме того ... Я нашел код, который также использовать settings.STATIC_URL
включены {{STATIC_URL}}
в шаблонах.
я немного смущен.
django
django-templates
trikoder_beta
источник
источник
Ответы:
Встроенный
static
тег шаблона "ссылка [и] на статические файлы, которые сохраняются вSTATIC_ROOT
".В
staticfiles
CONTRIB приложения вstatic
шаблонный тег «использует сконфигурированный дляSTATICFILES_STORAGE
хранения , чтобы создать полный URL для данного относительного пути», который «особенно полезно при использовании нелокального систему хранения данных для развертывания файлов».В документации встроенного
static
тега шаблона (ссылка на которую приведена выше) есть примечание, в котором говорится об использовании тега шаблонаstaticfiles
приложения contribstatic
«если у вас есть расширенный вариант использования, такой как использование облачной службы для обслуживания статических файлов», и в нем приводится этот пример делать это:{% load static from staticfiles %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
Вы можете использовать,
{% load staticfiles %}
а не,{% load static from staticfiles %}
если хотите, но последнее более явно.источник
{% load static %}
. «В более старых версиях вам приходилось использовать{% load static from staticfiles %}
в своем шаблоне для обслуживания файлов из хранилища, определенного в STATICFILES_STORAGE. Это больше не требуется».{% load static %}
.Я не знаю, в чем должна быть разница, но я обнаружил разницу в вариантах использования (с использованием 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)
Надеюсь, эти знания будут кому-то полезны.
источник
Документация Django теперь предпочитает
{% load static %}
.{% load staticfiles %}
работает, но я думаю, что он устарел.https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
источник
Обратитесь к документации , где есть хорошее объяснение. На самом деле
{% static %}
тег шаблона знает местоположение STATICFILE_STORAGEКак говорят документы:
Надеюсь, это поможет!!
источник
{% load static %}
,{% load staticfiles %}
,{{STATIC_URL}}
... и знаю , что я не знаю , в чем разница между{% load static %}
и{% load static from staticfiles %}
{% load staticfiles %}
очень полезен, когда вы используете разные хранилища, такие как S3, тогда он преобразуется в URL-адреса S3источник