Solución:
Desarrollo
STATIC_ROOT
es inútil durante el desarrollo, solo es necesario para la implementación.
Mientras está en desarrollo, STATIC_ROOT
no hace nada. Incluso no es necesario configurarlo. Django busca archivos estáticos dentro del directorio de cada aplicación (myProject/appName/static
) y los sirve automáticamente.
Esta es la magia hecha por manage.py runserver
cuando DEBUG=True
.
Despliegue
Cuando su proyecto se pone en marcha, las cosas difieren. Lo más probable es que sirva contenido dinámico usando Django y los archivos estáticos serán servidos por Nginx. ¿Por qué? Porque Nginx es increíblemente eficiente y reducirá la carga de trabajo de Django.
Aquí es donde STATIC_ROOT
se vuelve útil, ya que Nginx no sabe nada sobre su proyecto django y no sabe dónde encontrar archivos estáticos.
Así que te pones STATIC_ROOT = '/some/folder/'
y decirle a Nginx que busque archivos estáticos en /some/folder/
. Entonces tu corres manage.py collectstatic
y Django copiará archivos estáticos de todas las aplicaciones que tenga que /some/folder/
.
Directorios adicionales para archivos estáticos
STATICFILES_DIRS
se usa para incluir adicional directorios para collectstatic
buscar. Por ejemplo, de forma predeterminada, Django no reconoce /myProject/static/
. Para que puedas incluirlo tú mismo.
Ejemplo
STATIC_URL = '/static/'
if not DEBUG:
STATIC_ROOT = '/home/django/www-data/site.com/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static/'),
]
Puede encontrar estas configuraciones en la documentación de Django. Aquí están mis propias definiciones y citas de la documentación:
-
MEDIA_ROOT
es la carpeta donde se cargan los archivos usandoFileField
iré.Ruta absoluta del sistema de archivos al directorio que contendrá los archivos cargados por el usuario.
-
STATIC_ROOT
es la carpeta donde se almacenarán los archivos estáticos después de usarmanage.py collectstatic
La ruta absoluta al directorio donde
collectstatic
recopilará archivos estáticos para su implementación.Si el
staticfiles
La aplicación contrib está habilitada (predeterminada)collectstatic
El comando de administración recopilará archivos estáticos en este directorio. Consulte el manual sobre cómo administrar archivos estáticos para obtener más detalles sobre el uso. -
STATICFILES_DIRS
es la lista de carpetas donde Django buscará archivos estáticos adicionales además delstatic
carpeta de cada aplicación instalada.Esta configuración define las ubicaciones adicionales que atravesará la aplicación staticfiles si el
FileSystemFinder
el buscador está habilitado, por ejemplo, si usa elcollectstatic
ofindstatic
comando de administración o use la vista de servicio de archivos estáticos.
En su configuración, debe tener:
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
# Make a tuple of strings instead of a string
STATICFILES_DIRS = ("/home/user/project/django1/top/listing/static", )
…dónde:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
como se define en el Django predeterminado settings.py
ahora.
Diferencia entre STATICFILES_DIRS
y STATIC_ROOT
los STATICFILES_DIRS
puede contener otros directorios (no necesariamente directorios de aplicaciones) con archivos estáticos y estos archivos estáticos se recopilarán en su STATIC_ROOT cuando ejecute collectstatic
. Estos archivos estáticos serán luego servidos por su servidor web y serán servidos desde su STATIC_ROOT.
Si tiene archivos actualmente en su STATIC_ROOT que desea servir, entonces debe moverlos a un directorio diferente y poner ese otro directorio en STATICFILES_DIRS
. Tu STATIC_ROOT
El directorio debe estar vacío y todos los archivos estáticos deben recopilarse en ese directorio.
MEDIA_ROOT
donde van los archivos multimedia, todos los archivos cargados. Ejemplo: imágenes, archivos