not found files debug python django django-staticfiles django-static

python - debug - django static files not found



Diferencias entre STATICFILES_DIR, STATIC_ROOT y MEDIA_ROOT (3)

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 activa, las cosas difieren. Lo más probable es que sirvas contenido dinámico usando Django y Nginx servirá los archivos estáticos. ¿Por qué? Porque Nginx es increíblemente eficiente y reducirá la carga de trabajo de Django.

Aquí es donde STATIC_ROOT vuelve práctico, ya que Nginx no sabe nada sobre su proyecto django y no sabe dónde encontrar los archivos estáticos.

Así que establece STATIC_ROOT = ''/some/folder/'' y le dice a Nginx que busque archivos estáticos en /some/folder/ . Luego ejecuta manage.py collectstatic y Django copiará los archivos estáticos de todas las aplicaciones que tenga en /some/folder/ .

Directorios adicionales para archivos estáticos

STATICFILES_DIRS se usa para incluir directorios adicionales para collectstatic a buscar. Por ejemplo, de forma predeterminada, Django no reconoce /myProject/static/ . Entonces puede incluirlo usted 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/''), ]

¿Cuáles son las diferencias de estas tres URL estáticas?

No estoy seguro si estoy en lo correcto, estoy usando MEDIA_ROOT para almacenar mis fotos cargadas (a través de models.ImageField() )

Sin embargo, creé un script JS para mi administrador y en admin.py . Definí los medios de la siguiente manera:

.... class Media: js = (''/admin/custom.js'', )

y mi settings.py :

.... STATIC_ROOT = "/home/user/project/django1/top/listing/static"

y agregué el custom.js a STATIC_ROOT/admin/custom.js , pero no está funcionando. Lanzando el error 404 no encontrado.

Y luego cambio el STATIC_ROOT a STATICFILES_DIRS , ¡y funciona!

.... STATICFILES_DIRS = "/home/user/project/django1/top/listing/static"

Entonces, no entiendo lo que está pasando aquí. De hecho, simplemente no entiendo cuál es la diferencia entre STATIC_ROOT y STATICFILES_DIRS .

Actualmente estoy probando Django en mi máquina a través de virtualenv, aún no implementado, ¿es la razón por la cual STATIC_ROOT no funciona?


Diferencia entre STATICFILES_DIRS y STATIC_ROOT

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 servidos por su servidor web y serán servidos desde su STATIC_ROOT.

Si tiene archivos actualmente en su STATIC_ROOT que desea atender, debe moverlos a un directorio diferente y colocar ese otro directorio en STATICFILES_DIRS . Su directorio STATIC_ROOT debe estar vacío y todos los archivos estáticos deben ser recopilados en ese directorio.

MEDIA_ROOT donde MEDIA_ROOT los archivos multimedia, todos los archivos cargados. Ejemplo: imágenes, archivos


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 MEDIA_ROOT los archivos cargados con FileField .

    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á los archivos estáticos para su implementación.

    Si la aplicación contrib de staticfiles está habilitada (por defecto), el comando de gestión collectstatic recopilará archivos estáticos en este directorio. Consulte la guía sobre la administración de 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 aparte de la carpeta static de cada aplicación instalada.

    Esta configuración define las ubicaciones adicionales que atravesará la aplicación staticfiles si el buscador FileSystemFinder está habilitado, por ejemplo, si usa el comando de administración collectstatic o findstatic o utiliza 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 la configuración de Django settings.py ahora.