Самая важная часть вопроса в теме.
Мне интересно, какой тег лучше всего подходит для какого случая. Кроме того ... Я нашел код, который также использовать settings.STATIC_URL
включены {{STATIC_URL}}
в шаблонах.
я немного смущен.
Самая важная часть вопроса в теме.
Мне интересно, какой тег лучше всего подходит для какого случая. Кроме того ... Я нашел код, который также использовать settings.STATIC_URL
включены {{STATIC_URL}}
в шаблонах.
я немного смущен.
Ответы:
Встроенный static
тег шаблона "ссылка [и] на статические файлы, которые сохраняются в STATIC_ROOT
".
В staticfiles
CONTRIB приложения в static
шаблонный тег «использует сконфигурированный для STATICFILES_STORAGE
хранения , чтобы создать полный URL для данного относительного пути», который «особенно полезно при использовании нелокального систему хранения данных для развертывания файлов».
В документации встроенного static
тега шаблона (ссылка на которую приведена выше) есть примечание, в котором говорится об использовании тега шаблона staticfiles
приложения contrib static
«если у вас есть расширенный вариант использования, такой как использование облачной службы для обслуживания статических файлов», и в нем приводится этот пример делать это:
{% 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 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 static %}
, {% load staticfiles %}
, {{STATIC_URL}}
... и знаю , что я не знаю , в чем разница между {% load static %}
и{% load static from staticfiles %}