Найважливіша частина питання в темі.
Мені цікаво, який тег найкраще підходить для того чи іншого випадку. Більше того ... Я знайшов код, який також використовую 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 кидає a 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 %}