Najważniejsza część pytania dotyczy tematu.
Zastanawiam się, jaki tag jest najlepszy w jakim przypadku. Ponadto ... znalazłem kod, który również wykorzystuję settings.STATIC_URL
zawarty {{STATIC_URL}}
w szablonach.
Jestem trochę zmieszany.
django
django-templates
trikoder_beta
źródło
źródło
Odpowiedzi:
Wbudowany
static
znacznik szablonu „łączy [i] z plikami statycznymi, które są zapisywane wSTATIC_ROOT
”.W
staticfiles
contrib aplikacji wstatic
szablon tag „używa skonfigurowanejSTATICFILES_STORAGE
pamięci masowej, aby utworzyć pełny adres URL dla danej ścieżki względnej”, który jest „szczególnie przydatna przy użyciu non-local backendu przechowywania wdrożyć pliki”.Dokumentacja wbudowanego
static
tagu szablonu (do której link znajduje się powyżej) zawiera uwagę, która mówi, że należy użyć tagu szablonustaticfiles
aplikacji Contribstatic
„jeśli masz zaawansowany przypadek użycia, taki jak korzystanie z usługi w chmurze do obsługi plików statycznych”, i podaje ten przykład robiąc tak:{% load static from staticfiles %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
Możesz użyć
{% load staticfiles %}
raczej niż{% load static from staticfiles %}
jeśli chcesz, ale to drugie jest bardziej wyraźne.źródło
{% load static %}
. „W starszych wersjach trzeba było używać{% load static from staticfiles %}
w szablonie do udostępniania plików z magazynu zdefiniowanego w STATICFILES_STORAGE. Nie jest to już wymagane”.{% load static %}
.Nie wiem, jaka powinna być różnica, ale znalazłem różnicę w przypadku użycia (używając django 1.9.1 działającego przez apache, wsgi w Pythonie 3.4). W mojej aplikacji mam kilka obrazów w
ImageFields
bazie danych. Jeśli używam takiego kodu w moim szablonie:<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
wtedy, jeśli używam
{% load static %}
, django rzuca aTypeError
(Cannot mix str and non-str arguments
). Dzieje się tak prawdopodobnie dlatego, żeobject.image
nie jest to ciąg, to jestImageField
, który jest konwertowany na łańcuch w późniejszym etapie. Jeśli jednak używa się{% load staticfiles %}
taki błąd nie występuje.Niestety odkryłem tę różnicę po spędzeniu godzin na próbach debugowania problemu. Udało mi się znaleźć obejście podczas korzystania z pierwszej opcji, a mianowicie dodać metodę konwertera ciągów do obiektu w następujący sposób:
#image string def image_str(self): return str(self.image)
Mam nadzieję, że ta wiedza komuś się przyda.
źródło
Dokumentacja Django preferuje teraz
{% load static %}
.{% load staticfiles %}
działa, ale myślę, że jest przestarzały.https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
źródło
Zapoznaj się z dokumentacją , w której znajduje się ładne wyjaśnienie. Właściwie
{% static %}
tag szablonu zna lokalizację STATICFILE_STORAGEJak mówią doktorzy:
Mam nadzieję, że to pomoże!
źródło
{% load static %}
,{% load staticfiles %}
,{{STATIC_URL}}
... i wiem, że nie wiem, jaka jest różnica między{% load static %}
i{% load static from staticfiles %}
{% load staticfiles %}
jest bardzo pomocny, gdy używasz różnych magazynów, takich jak S3, a następnie zostanie przekonwertowany na adresy URL S3źródło