Saltar al contenido

Diferencias entre STATICFILES_DIR, STATIC_ROOT y MEDIA_ROOT

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 usando FileField 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 usar manage.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 del static 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 el collectstatic o findstatic 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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *