Si encuentras algún problema en tu código o proyecto, recuerda probar siempre en un entorno de testing antes añadir el código al proyecto final.
Los sitios web generalmente necesitan entregar archivos adicionales como imágenes, JavaScript o CSS. En Django, nos referimos a estos archivos como “static archivos ”. Django proporciona django.contrib.staticfiles
para ayudarlo a administrarlos.
Esta página describe cómo puede servir estos static archivos.
Configurando static archivos
- Asegúrate de eso
django.contrib.staticfiles
está incluido en tuINSTALLED_APPS
. -
En su archivo de configuración, defina
STATIC_URL
, por ejemplo:STATIC_URL = '/static/'
-
En sus plantillas, use el
static
etiqueta de plantilla para construir la URL para la ruta relativa dada usando el configuradoSTATICFILES_STORAGE
.% load static %
- Almacene su static archivos en una carpeta llamada
static
en tu aplicación. Por ejemplomy_app/static/my_app/example.jpg
.
Sirviendo los archivos
Además de estos pasos de configuración, también necesitará entregar el static archivos.
Durante el desarrollo, si usa django.contrib.staticfiles
, esto lo hará automáticamente runserver
Cuándo DEBUG
se establece en True
(ver django.contrib.staticfiles.views.serve()
).
Este método es extremadamente ineficiente y probablemente inseguro, así es inadecuado para la producción.
Ver Despliegue static archivos para estrategias adecuadas para servir static archivos en entornos de producción.
Tu proyecto probablemente también tendrá static activos que no están vinculados a una aplicación en particular. Además de utilizar un static/
directorio dentro de sus aplicaciones, puede definir una lista de directorios (STATICFILES_DIRS
) en su archivo de configuración donde Django también buscará static archivos. Por ejemplo:
STATICFILES_DIRS = [ BASE_DIR / "static", '/var/www/static/', ]
Consulte la documentación para STATICFILES_FINDERS
configuración para obtener detalles sobre cómo staticfiles
encuentra sus archivos.
Espacio de nombres de archivos estáticos
Ahora nosotros podría ser capaz de salirse con la suya poniendo nuestro static archivos directamente en my_app/static/
(en lugar de crear otro my_app
subdirectorio), pero en realidad sería una mala idea. Django usará el primero static encuentra cuyo nombre coincide, y si tenía un static archivo con el mismo nombre en un diferente aplicación, Django no podría distinguir entre ellos. Necesitamos poder apuntar a Django en el correcto, y la mejor manera de asegurarnos de esto es mediante espacio de nombres ellos. Es decir, poniendo esos static archivos dentro otro directorio con el nombre de la propia aplicación.
Puedes espacio de nombres static activos en STATICFILES_DIRS
especificando prefijos.
Servicio static archivos durante el desarrollo
Si utiliza django.contrib.staticfiles
como se explicó anteriormente, runserver
hará esto automáticamente cuando DEBUG
se establece en True
. Si no tienes django.contrib.staticfiles
en INSTALLED_APPS
, aún puede servir manualmente static archivos usando el django.views.static.serve()
vista.
¡Esto no es adecuado para uso en producción! Para conocer algunas estrategias de implementación comunes, consulte Despliegue static archivos.
Por ejemplo, si tu STATIC_URL
Se define como /static/
, puede hacerlo agregando el siguiente fragmento a su urls.py:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # ... the rest of your URLconf goes here ... ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Nota
Esta función auxiliar funciona solo en modo de depuración y solo si el prefix es local (p. ej. /static/
) y no una URL (p. ej. http://static.example.com/
).
Además, esta función auxiliar solo sirve para el STATIC_ROOT
carpeta; no funciona static descubrimiento de archivos como django.contrib.staticfiles
.
Entrega de archivos cargados por un usuario durante el desarrollo
Durante el desarrollo, puede servir archivos multimedia subidos por el usuario desde MEDIA_ROOT
utilizando el django.views.static.serve()
vista.
¡Esto no es adecuado para uso en producción! Para conocer algunas estrategias de implementación comunes, consulte Despliegue static archivos.
Por ejemplo, si tu MEDIA_URL
Se define como /media/
, puede hacerlo agregando el siguiente fragmento a su ROOT_URLCONF
:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # ... the rest of your URLconf goes here ... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Nota
Esta función auxiliar funciona solo en modo de depuración y solo si el prefix es local (p. ej. /media/
) y no una URL (p. ej. http://media.example.com/
).
Pruebas
Al ejecutar pruebas que usan solicitudes HTTP reales en lugar del cliente de prueba integrado (es decir, cuando se usa el LiveServerTestCase
) el static los activos deben servirse junto con el resto del contenido para que el entorno de prueba reproduzca el real con la mayor fidelidad posible, pero LiveServerTestCase
tiene solo muy básico static funcionalidad de servicio de archivos: no conoce la función de búsqueda de la staticfiles
aplicación y asume la static el contenido ya se ha recopilado en STATIC_ROOT
.
Debido a esto, staticfiles
envía su propio django.contrib.staticfiles.testing.StaticLiveServerTestCase
, una subclase de la integrada que tiene la capacidad de servir de forma transparente todos los activos durante la ejecución de estas pruebas de una manera muy similar a lo que obtenemos en tiempo de desarrollo con DEBUG = True
, es decir, sin tener que recopilarlos utilizando collectstatic
primero.
Despliegue
django.contrib.staticfiles
proporciona un comando de administración de conveniencia para reunir static archivos en un solo directorio para que pueda servirlos fácilmente.
-
Selecciona el
STATIC_ROOT
en el directorio desde el que le gustaría servir estos archivos, por ejemplo:STATIC_ROOT = "/var/www/example.com/static/"
-
Ejecutar el
collectstatic
comando de gestión:$ python manage.py collectstatic
Esto copiará todos los archivos de su static carpetas en el
STATIC_ROOT
directorio. - Utilice un servidor web de su elección para entregar los archivos. Despliegue static archivos cubre algunas estrategias de implementación comunes para static archivos.
Aprende más
Este documento cubre los conceptos básicos y algunos patrones de uso comunes. Para obtener detalles completos sobre todas las configuraciones, comandos, etiquetas de plantilla y otras piezas incluidas en django.contrib.staticfiles
, ver la referencia de archivos estáticos.
Calificaciones y reseñas
Si te gusta el asunto, tienes el poder dejar una sección acerca de qué te ha impresionado de esta sección.