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