Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.5K
Vistas
Cómo servir archivos estáticos en FastAPI

Estoy tratando de servir archivos estáticos que tengo en un directorio package_docs. Cuando abro en el navegador:

http://127.0.0.1:8001/packages/docs/index.html , la página se está ejecutando.

Pero quiero abrir la página: http://127.0.0.1:8001/packages/docs/

sin el archivo fuente. Y la salida es 404 Not Found

 app.mount("/packages/docs", StaticFiles(directory=pkg_resources.resource_filename(__name__, 'package_docs') ), name="package_docs") @app.get("/packages/docs/.*", include_in_schema=False) def root(): return HTMLResponse(pkg_resources.resource_string(__name__, "package_docs/index.html")) app.include_router(static.router) app.include_router(jamcam.router, prefix="/api/v1/cams", tags=["jamcam"])

¿Cómo puedo cambiar mi código? Cualquier consejo será útil. Gracias de antemano.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Hay una opción html en Starlette que se puede usar dentro de FastAPI. Documentación Starlette

Esto te permitiría tener algo como:

 app.mount("/site", StaticFiles(directory="site", html = True), name="site")

Que analizaría /site a /site/index.html, /site/foo/ a /site/foo/index.html, etc.

Las otras respuestas pueden ayudarlo a redirigir si desea cambiar los nombres de las carpetas de una manera que no se maneja usando "directory = /foo", pero esta es la opción más simple si simplemente desea cargar los archivos .html asociados.

over 4 years ago · Santiago Trujillo Denunciar

0

Debe usar TemplateResponse de FastAPI (en realidad, Starlette):

 from fastapi import Request from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates app.mount("/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="package_docs") @app.get("/items/{id}") async def example(request: Request): return templates.TemplateResponse("index.html", {"request": request})

Request como parte de los pares clave-valor en el contexto de Jinja2. Por lo tanto, también debe declararlo como parámetro de consulta. y debe especificar un archivo html que desea procesar con Jinja ("your.html", {"request": request})

También para devolver una HTMLResponse directamente, puede usar HTMLResponse de fastapi.responses

 from fastapi.responses import HTMLResponse @app.get("/items/", response_class=HTMLResponse) async def read_items(): return """ <html> <head> <title></title> </head> <body> </body> </html> """

Puede leer más sobre la respuesta personalizada de Respuestas personalizadas de FastAPI

over 4 years ago · Santiago Trujillo Denunciar

0

de los documentos

El primer "/static" se refiere a la subruta en la que se "montará" esta "subaplicación". Por lo tanto, cualquier ruta que comience con "/static" será manejada por él.

Esto significa que monta su directorio en http://127.0.0.1:8001/packages/docs/ , pero luego debe especificar un archivo en la URL o agregar un controlador como lo hizo. Sin embargo, el problema es que, dado que montó la ruta primero, no tendrá en cuenta las siguientes rutas que incluyen parte de la ruta.

Una posibilidad es especificar primero la ruta para http://127.0.0.1:8001/packages/docs/ para que sea manejado por fastapi y luego montar la carpeta, sirviendo archivos estáticos.

Además, redirigiría a los usuarios que soliciten http://127.0.0.1:8001/packages/docs/ a http://127.0.0.1:8001/packages/docs/index.html

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda