La parte más importante de la pregunta está en el tema.
Me pregunto qué etiqueta es mejor para cada caso. Además ... encontré código, que también uso settings.STATIC_URL
incluido {{STATIC_URL}}
en las plantillas.
Estoy un poco confundido.
La parte más importante de la pregunta está en el tema.
Me pregunto qué etiqueta es mejor para cada caso. Además ... encontré código, que también uso settings.STATIC_URL
incluido {{STATIC_URL}}
en las plantillas.
Estoy un poco confundido.
Respuestas:
La static
etiqueta de plantilla incorporada "enlace [s] a archivos estáticos que se guardan en STATIC_ROOT
".
La etiqueta de plantilla de staticfiles
la aplicación contribstatic
"usa el STATICFILES_STORAGE
almacenamiento configurado para crear la URL completa para la ruta relativa dada", lo cual es "especialmente útil cuando se usa un backend de almacenamiento no local para implementar archivos".
La static
documentación de la etiqueta de plantilla incorporada (vinculada a la anterior) tiene una nota que dice que use la etiqueta de plantilla de staticfiles
la aplicación contrib static
"si tiene un caso de uso avanzado, como usar un servicio en la nube para entregar archivos estáticos", y da este ejemplo de haciéndolo:
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
Podría usar en {% load staticfiles %}
lugar de {% load static from staticfiles %}
si lo desea, pero este último es más explícito.
{% load static %}
. "En versiones anteriores, tenías que usar {% load static from staticfiles %}
en tu plantilla para entregar archivos desde el almacenamiento definido en STATICFILES_STORAGE. Esto ya no es necesario".
{% load static %}
.
No sé cuál se supone que es la diferencia, pero encontré una diferencia de caso de uso (usando django 1.9.1 ejecutándose a través de apache, wsgi en Python 3.4). En mi aplicación, tengo algunas imágenes ImageFields
en la base de datos. Si uso un código como este en mi plantilla:
<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
entonces, si lo uso {% load static %}
, django lanza un TypeError
( Cannot mix str and non-str arguments
). Esto se debe presumiblemente a que object.image
no es una cadena, es una ImageField
, que se convierte en una cadena en una etapa posterior. Sin embargo, si se utiliza {% load staticfiles %}
no se produce tal error.
Desafortunadamente, descubrí esta diferencia después de pasar horas tratando de depurar el problema. Me las arreglé para encontrar una solución al usar la primera opción, es decir, agregar un método de conversión de cadenas al objeto de esta manera:
#image string
def image_str(self):
return str(self.image)
Espero que este conocimiento sea de utilidad para alguien.
La documentación de Django prefiere ahora {% load static %}
.
{% load staticfiles %}
funciona pero creo que está en desuso.
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
Consulte los documentos , donde hay una buena explicación. En realidad, la {% static %}
etiqueta de la plantilla conoce la ubicación de STATICFILE_STORAGE
Como dicen los doctores:
{% 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".
Esto es especialmente útil cuando se usa un backend de almacenamiento no local para implementar archivos como se documenta en Entrega de archivos estáticos desde un servicio en la nube o CDN.
Si desea recuperar una URL estática sin mostrarla, puede usar una llamada ligeramente diferente:
{% load static from staticfiles %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}" alt="Hi!" />
¡¡Espero que ayude!!
{% load static %}
, {% load staticfiles %}
, {{STATIC_URL}}
... y sé que no sé cuál es la diferencia entre {% load static %}
e{% load static from staticfiles %}