{% Load staticfiles%} ve {% load static%} arasındaki fark nedir


95

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_URLolarak dahil {{STATIC_URL}}şablonları.

Biraz kafam karıştı.


Her şey için sadece STATIC_URL kullanıyorum ve benim için iyi çalışıyor gibi görünüyor
Maximas

1
@Maximas İşe yarıyor, ama en iyi uygulama değil sanırım
KhoPhi

1
Bu cevapların hiçbiri iyi değil. Bu daha yeni ve eksiksiz bir cevap .
Jarad

Yanıtlar:


60

Yerleşik staticşablon etiketi "kaydedilen statik dosyalara bağlantılar STATIC_ROOT".

staticfilesContrib 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" staticfilesContrib 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.


33
Django V1.10 artık sadece öneriyor {% 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."
John C

1
2016'dan beri sadece kullanmamız gerekiyor {% load static %}.
Uri

5

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, ImageFieldsveritabanı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.imagebir dizge olmadığı için, ImageFielddaha 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.



1

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!!


17
Hala kullanmalıyım zaman olacağını bilmiyorum {% load static %}, {% load staticfiles %}, {{STATIC_URL}}... ve arasındaki fark nedir bilmiyorum biliyorum {% load static %}ve{% load static from staticfiles %}
trikoder_beta

1
sadece dokümandan bir dizi satırı kopyalamak gerçekten yardımcı olmuyor
Hasan Iqbal

1

{% load staticfiles %} S3 gibi farklı depoları kullandığınızda çok faydalıdır, ardından S3 URL'lerine dönüşür

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.