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.
django
django-templates
trikoder_beta
fuente
fuente
Respuestas:
La
static
etiqueta de plantilla incorporada "enlace [s] a archivos estáticos que se guardan enSTATIC_ROOT
".La etiqueta de plantilla de
staticfiles
la aplicación contribstatic
"usa elSTATICFILES_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 destaticfiles
la aplicación contribstatic
"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:Podría usar en
{% load staticfiles %}
lugar de{% load static from staticfiles %}
si lo desea, pero este último es más explícito.fuente
{% 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:entonces, si lo uso
{% load static %}
, django lanza unTypeError
(Cannot mix str and non-str arguments
). Esto se debe presumiblemente a queobject.image
no es una cadena, es unaImageField
, 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:
Espero que este conocimiento sea de utilidad para alguien.
fuente
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
fuente
Consulte los documentos , donde hay una buena explicación. En realidad, la
{% static %}
etiqueta de la plantilla conoce la ubicación de STATICFILE_STORAGEComo dicen los doctores:
¡¡Espero que ayude!!
fuente
{% load static %}
,{% load staticfiles %}
,{{STATIC_URL}}
... y sé que no sé cuál es la diferencia entre{% load static %}
e{% load static from staticfiles %}
{% load staticfiles %}
es muy útil cuando utiliza diferentes almacenamientos como S3, luego se convertirá en las URL de S3fuente