python - examples - django template variable
¿Cuál es el punto del colectivo estático de Django? (4)
Recopile archivos estáticos de múltiples aplicaciones en una sola ruta
Bueno, un solo
proyecto de
Django puede usar varias
aplicaciones
, por lo que si bien solo tiene un
myapp
, en realidad puede ser
myapp1
,
myapp2
, etc.
Al copiarlas desde el interior de las aplicaciones individuales en una sola carpeta, puede apuntar su servidor web frontend (por ejemplo, nginx) a esa única carpeta
STATIC_ROOT
y servir archivos estáticos desde una sola ubicación, en lugar de configurar su servidor web para servir archivos estáticos desde múltiples rutas.
URL persistentes con ManifestStaticFilesStorage
Una nota sobre el hash MD5 que se agrega al nombre de archivo para el control de versiones: no es parte del comportamiento predeterminado de
collectstatic
, como la
settings.STATICFILES_STORAGE
StaticFilesStorage
como valor predeterminado
StaticFilesStorage
(que no hace eso)
El hash MD5 se activará, por ejemplo, si lo configura para usar
ManifestStaticFilesStorage
, que anuncia ese comportamiento.
El propósito de este almacenamiento es seguir sirviendo los archivos antiguos en caso de que algunas páginas aún se refieran a esos archivos, por ejemplo, porque usted o un servidor proxy de terceros los almacenan en caché. Además, es muy útil si desea aplicar encabezados Expires de futuro lejano a los archivos implementados para acelerar el tiempo de carga para las visitas posteriores a la página.
Esta es probablemente una pregunta estúpida, pero simplemente no hace clic en mi cabeza.
En Django, la convención es colocar todos sus archivos estáticos (es decir, css, js) específicos de su aplicación en una carpeta llamada estática . Entonces la estructura se vería así:
mysite/
manage.py
mysite/ --> (settings.py, etc)
myapp/ --> (models.py, views.py, etc)
static/
En mysite / settings.py tengo:
STATIC_ROOT = ''staticfiles''
Entonces cuando ejecuto el comando:
python manage.py collectstatic
Crea una carpeta llamada staticfiles en el nivel raíz (por lo tanto, el mismo directorio que myapp /)
¿Cuál es el punto de esto? ¿No es solo crear una copia de todos mis archivos estáticos?
En la instalación de producción, desea tener URL persistentes. La URL no cambia a menos que cambie el contenido del archivo.
Esto es para evitar que los clientes tengan una versión incorrecta del archivo CSS o JS en su computadora al abrir una página web desde Django. Django staticfiles detecta cambios en los archivos y actualiza las URL en consecuencia, de modo que si el archivo CSS o JS cambia, el navegador web descarga la nueva versión.
Esto generalmente se logra agregando hash MD5 al nombre del archivo durante la ejecución
collectstatic
.
Editar: también vea la respuesta relacionada a múltiples aplicaciones.
Es útil cuando hay múltiples aplicaciones de Django dentro del sitio.
collectstatic
luego recopilará archivos estáticos de todas las aplicaciones en un solo lugar, para que se puedan servir en un entorno de producción.
Los archivos estáticos de Django pueden estar en muchos lugares.
Un archivo que se sirve como
/static/img/icon.png
podría
provenir de muchos lugares
.
Por defecto:
-
FileSystemFinder
buscaráimg/icon.png
en cada uno deSTATICFILES_DIRS
, -
AppDirectoriesFinder
buscaráimg/icon.png
en la subcarpetastatic
en cada una de susINSTALLED_APPS
. Esto permite que las bibliotecas como Django Admin agreguen sus propios archivos estáticos a su aplicación.
Ahora: esto solo funciona si ejecutas
manage.py runserver
con DEBUG = 1.
Cuando se active, el proceso de Django ya no servirá a los activos estáticos.
Sería ineficiente usar Django para servirlos, hay herramientas más especializadas específicamente para eso.
En cambio, deberías hacer algo como esto:
- encuentra todos los archivos estáticos de cada aplicación
- construir un solo directorio que los contenga a todos
-
cárguelos en algún lugar (un directorio
static
algún lugar de su servidor web o un almacenamiento de archivos de terceros) -
configure su servidor web (como nginx) para servir
/static/*
directamente desde ese directorio y redirigir cualquier otra solicitud a Django.
collectstatic
es un script listo para usar que prepara este directorio para usted, de modo que pueda conectarlo directamente a su script de implementación.