Esta es probablemente una pregunta estúpida, pero simplemente no está haciendo clic en mi cabeza.
En Django, la convención es poner todos sus archivos estáticos (es decir, css, js) específicos de su aplicación en una carpeta llamada static . 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 (el mismo directorio que myapp/
)
¿Cuál es el punto de esto? ¿No es solo crear una copia de todos mis archivos estáticos?
fuente
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 lastatic
subcarpeta de cada uno de susINSTALLED_APPS
. Esto permite a bibliotecas como Django Admin agregar sus propios archivos estáticos a su aplicación.Ahora: esto solo funciona si ejecuta
manage.py runserver
con DEBUG = 1. Cuando entre en funcionamiento, el proceso de Django ya no servirá los activos estáticos. Sería ineficaz usar Django para atenderlos, existen herramientas más especializadas específicamente para eso.En su lugar, debería hacer algo como esto:
static
directorio en algún lugar de su servidor web o un almacenamiento de archivos de terceros)/static/*
directamente desde ese directorio y redirija cualquier otra solicitud a Django.collectstatic
es un script listo para usar que prepara este directorio para usted, para que pueda conectarlo directamente a su script de implementación.fuente
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
collectstatic
ejecución.Editar: consulte también la respuesta relacionada con varias aplicaciones.
fuente
settings.STATICFILES_STORAGE
predeterminado esStaticFilesStorage
, por lo que MD5 se activará solo después de que, por ejemplo, lo establezca enManifestStaticFilesStorage
, ¿estoy en lo correcto?Es útil cuando hay varias aplicaciones de django dentro del sitio.
collectstatic
luego recopilará archivos estáticos de todas las aplicaciones en un solo lugar, para que puedan ser servidos en un entorno de producción.fuente