variable template examples python django django-staticfiles static-files collectstatic

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 de STATICFILES_DIRS ,
  • AppDirectoriesFinder buscará img/icon.png en la subcarpeta static en cada una de sus INSTALLED_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.