La parte più importante della domanda è nell'argomento.
Mi chiedo quale tag sia il migliore per quel caso. Inoltre ... ho trovato codice, che uso anche settings.STATIC_URL
da incluso {{STATIC_URL}}
nei template.
Sono leggermente confuso.
La parte più importante della domanda è nell'argomento.
Mi chiedo quale tag sia il migliore per quel caso. Inoltre ... ho trovato codice, che uso anche settings.STATIC_URL
da incluso {{STATIC_URL}}
nei template.
Sono leggermente confuso.
Risposte:
Il static
tag del modello incorporato "collega [i] ai file statici salvati in STATIC_ROOT
".
Il tag staticfiles
del static
modello dell'app contrib "utilizza lo STATICFILES_STORAGE
spazio di archiviazione configurato per creare l'URL completo per il percorso relativo specificato", che è "particolarmente utile quando si utilizza un backend di archiviazione non locale per distribuire i file".
La static
documentazione del tag modello integrato (collegata sopra) contiene una nota che dice di utilizzare il tag modello staticfiles
dell'app contrib static
"se si dispone di un caso di utilizzo avanzato come l'utilizzo di un servizio cloud per servire file statici" e fornisce questo esempio di così facendo:
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
Potresti usare {% load staticfiles %}
piuttosto che {% load static from staticfiles %}
se lo desideri, ma quest'ultimo è più esplicito.
{% load static %}
. "Nelle versioni precedenti, {% load static from staticfiles %}
dovevi utilizzare nel tuo modello per servire i file dalla memoria definita in STATICFILES_STORAGE. Questo non è più necessario."
{% load static %}
.
Non so quale dovrebbe essere la differenza, ma ho trovato una differenza di casi d'uso (usando django 1.9.1 in esecuzione tramite apache, wsgi su Python 3.4). Nella mia app, ho alcune immagini nel ImageFields
database. Se utilizzo codice come questo nel mio modello:
<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
quindi, se uso {% load static %}
, django lancia un TypeError
( Cannot mix str and non-str arguments
). Ciò è presumibilmente perché object.image
non è una stringa, è un ImageField
, che viene convertito in una stringa in una fase successiva. Tuttavia, se si utilizza {% load staticfiles %}
non si verifica tale errore.
Sfortunatamente, ho scoperto questa differenza dopo aver passato ore a cercare di eseguire il debug del problema. Sono riuscito a trovare una soluzione alternativa per quando si utilizza la prima opzione, vale a dire aggiungere un metodo di conversione di stringhe all'oggetto in questo modo:
#image string
def image_str(self):
return str(self.image)
Spero che questa conoscenza possa essere utile a qualcuno.
La documentazione di Django preferisce ora {% load static %}
.
{% load staticfiles %}
funziona ma penso che sia deprecato.
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
Fare riferimento alla documentazione , dove c'è una bella spiegazione. In realtà il {% static %}
tag del modello conosce la posizione di STATICFILE_STORAGE
Come dicono i documenti:
{% 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".
Ciò è particolarmente utile quando si utilizza un backend di archiviazione non locale per distribuire i file come documentato in Elaborazione di file statici da un servizio cloud o CDN.
Se desideri recuperare un URL statico senza visualizzarlo, puoi utilizzare una chiamata leggermente diversa:
{% load static from staticfiles %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}" alt="Hi!" />
Spero che aiuti!!
{% load static %}
, {% load staticfiles %}
, {{STATIC_URL}}
... e sai che non so che cosa è la differenza tra {% load static %}
e{% load static from staticfiles %}