Saltar al contenido

Cómo servir archivos estáticos en Flask

Solución:

El método preferido es usar nginx u otro servidor web para servir archivos estáticos; podrán hacerlo de manera más eficiente que Flask.

Sin embargo, puede utilizar send_from_directory para enviar archivos desde un directorio, lo que puede ser bastante conveniente en algunas situaciones:

from flask import Flask, request, send_from_directory

# set the project root directory as the static folder, you can set others.
app = Flask(__name__, static_url_path="")

@app.route('/js/<path:path>')
def send_js(path):
    return send_from_directory('js', path)

if __name__ == "__main__":
    app.run()

Hacer no usar send_file o send_static_file con una ruta proporcionada por el usuario.

send_static_file ejemplo:

from flask import Flask, request
# set the project root directory as the static folder, you can set others.
app = Flask(__name__, static_url_path="")

@app.route("https://foroayuda.es/")
def root():
    return app.send_static_file('index.html')

Si solo desea mover la ubicación de sus archivos estáticos, entonces el método más simple es declarar las rutas en el constructor. En el siguiente ejemplo, moví mis plantillas y archivos estáticos a una subcarpeta llamada web.

app = Flask(__name__,
            static_url_path="", 
            static_folder="web/static",
            template_folder="web/templates")
  • static_url_path="" elimina cualquier ruta anterior de la URL (es decir, la ruta predeterminada /static).
  • static_folder="web/static" para servir los archivos que se encuentran en la carpeta
    web/static como archivos estáticos.
  • template_folder="web/templates" de manera similar, esto cambia la carpeta de plantillas.

Con este método, la siguiente URL devolverá un archivo CSS:

<link rel="stylesheet" type="text/css" href="https://foroayuda.es/css/bootstrap.min.css">

Y finalmente, aquí hay una instantánea de la estructura de carpetas, donde flask_server.py es la instancia de Flask:

Carpetas de matraces estáticos anidados

También puede, y este es mi favorito, configurar una carpeta como ruta estática para que todos los archivos puedan acceder a ellos.

app = Flask(__name__, static_url_path="/static")

Con ese conjunto, puede usar el HTML estándar:

<link rel="stylesheet" type="text/css" href="https://foroayuda.es/static/style.css">
¡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 *