Sorunun en önemli kısmı konunun içindedir.
Hangi durumda hangi etiketin en iyisi olduğunu merak ediyorum. Üstelik ... Ben de kullanmaları kesinlikle kod buldum settings.STATIC_URL
olarak dahil {{STATIC_URL}}
şablonları.
Biraz kafam karıştı.
Sorunun en önemli kısmı konunun içindedir.
Hangi durumda hangi etiketin en iyisi olduğunu merak ediyorum. Üstelik ... Ben de kullanmaları kesinlikle kod buldum settings.STATIC_URL
olarak dahil {{STATIC_URL}}
şablonları.
Biraz kafam karıştı.
Yanıtlar:
Yerleşik static
şablon etiketi "kaydedilen statik dosyalara bağlantılar STATIC_ROOT
".
staticfiles
Contrib uygulamanın static
şablon etiketi "yapılandırılmış kullanır STATICFILES_STORAGE
"dosyaları dağıtmak için yerel olmayan bir depolama arka uç kullanırken özellikle yararlıdır" dir, verilen nispi yolu için tam URL oluşturmak üzere depolama".
Yerleşik static
şablon etiketinin dokümantasyonunda (yukarı bağlantılı), "statik dosyalar sunmak için bir bulut hizmeti kullanmak gibi gelişmiş bir kullanım durumunuz varsa" staticfiles
Contrib uygulamasının static
şablon etiketini kullanmayı söyleyen bir not vardır ve bu, şu örneği verir: Bu şekilde:
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
Sen kullanabilirsiniz {% load staticfiles %}
ziyade {% load static from staticfiles %}
isterseniz ama ikincisi daha açık olduğunu.
{% load static %}
. "Eski sürümlerde, {% load static from staticfiles %}
dosyaları STATICFILES_STORAGE içinde tanımlanan depodan sunmak için şablonunuzda kullanmanız gerekiyordu. Bu artık gerekli değil."
{% load static %}
.
Farkın ne olduğunu bilmiyorum, ancak bir kullanım durumu farkı buldum (django 1.9.1 apache üzerinden, wsgi Python 3.4 üzerinde kullanarak). Uygulamamda, ImageFields
veritabanında bazı resimler var . Şablonumda böyle bir kod kullanırsam:
<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
sonra, kullanırsam {% load static %}
, django bir TypeError
( Cannot mix str and non-str arguments
) atar . Bu muhtemelen object.image
bir dizge olmadığı için, ImageField
daha sonraki bir aşamada bir dizgeye dönüştürülen bir dize olmasıdır. Ancak, biri kullanmazsa {% load staticfiles %}
böyle bir hata oluşmaz.
Ne yazık ki, bu farkı sorunu gidermek için saatler harcadıktan sonra keşfettim. İlk seçeneği kullanırken, nesneye şöyle bir dize dönüştürücü yöntemi eklemek için bir geçici çözüm bulmayı başardım:
#image string
def image_str(self):
return str(self.image)
Umarım bu bilgi birisine yararlı olur.
Django dokümantasyonu şimdi tercih ediyor {% load static %}
.
{% load staticfiles %}
çalışıyor ama kullanımdan kaldırıldığını düşünüyorum.
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
Bunun güzel bir açıklamasının olduğu belgelere bakın . Aslında {% static %}
şablon etiketi STATICFILE_STORAGE konumunu biliyor
Dokümanların dediği gibi:
{% 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".
Bu özellikle, dosyaları bir bulut hizmetinden veya CDN'den statik dosyalar sunma bölümünde belgelendiği gibi dağıtmak için yerel olmayan bir depolama arka ucu kullanıldığında yararlıdır.
Statik bir URL'yi görüntülemeden almak isterseniz, biraz farklı bir çağrı kullanabilirsiniz:
{% load static from staticfiles %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}" alt="Hi!" />
Umarım yardımcı olur!!
{% load static %}
, {% load staticfiles %}
, {{STATIC_URL}}
... ve arasındaki fark nedir bilmiyorum biliyorum {% load static %}
ve{% load static from staticfiles %}