Tengo un proyecto Django ejecutándose en mi máquina local con el servidor manage.py runserver y estoy tratando de ejecutarlo con Uvicorn antes de implementarlo en una máquina virtual. Entonces, en mi entorno virtual, instalé uvicorn e inicié el servidor, pero como puede ver a continuación, no puede encontrar los archivos css estáticos de Django.
(envdev) user@lenovo:~/python/myproject$ uvicorn myproject.asgi:application --port 8001 Started server process [17426] Waiting for application startup. ASGI 'lifespan' protocol appears unsupported. Application startup complete. Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit) INFO: 127.0.0.1:45720 - "GET /admin/ HTTP/1.1" 200 OK Not Found: /static/admin/css/base.css Not Found: /static/admin/css/base.css INFO: 127.0.0.1:45720 - "GET /static/admin/css/base.css HTTP/1.1" 404 Not Found Not Found: /static/admin/css/dashboard.css Not Found: /static/admin/css/dashboard.css INFO: 127.0.0.1:45724 - "GET /static/admin/css/dashboard.css HTTP/1.1" 404 Not Found Not Found: /static/admin/css/responsive.css Not Found: /static/admin/css/responsive.css INFO: 127.0.0.1:45726 - "GET /static/admin/css/responsive.css HTTP/1.1" 404 Not Found Uvicorn tiene una opción --root-path así que traté de especificar el directorio donde se encuentran estos archivos, pero aún aparece el mismo error (la ruta es correcta). ¿Cómo puedo solucionar este problema?
Cuando no se esté ejecutando con el servidor de desarrollo integrado, deberá
use el procedimiento clásico de implementación de archivos estáticos que recopila todos los archivos estáticos en alguna raíz y se espera que un servidor de archivos estáticos los sirva. Uvicorn no parece admitir el servicio de archivos estáticos, por lo que es posible que también necesite algo más (consulte, por ejemplo, https://www.uvicorn.org/deployment/#running-behind-nginx ).
(¡muy, muy poco preferible!) hacer que Django sirva archivos estáticos como lo hace en desarrollo
Agregue a continuación el código de su archivo settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static', )Agregue el siguiente código en su urls.py
from django.conf.urls.static import static from django.conf import settings urlpatterns = [. .....] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)Luego ejecute el siguiente comando, pero debe existir un directorio estático
python manage.py collectstatic --noinputservidor de inicio
uvicorn main.asgi:application --host 0.0.0.0