Mostrar una imagen en la aplicación Flask

Salman Mehmood 30 enero 2023
  1. Mostrar una imagen en la aplicación Flask
  2. Mostrar varias imágenes en la aplicación Flask
Mostrar una imagen en la aplicación Flask

Aprenderemos, con esta explicación, cómo podemos agregar una imagen a una página web y cómo podemos cargar o mostrar varias imágenes en la aplicación Flask.

Mostrar una imagen en la aplicación Flask

En esta sección, estaremos cargando una imagen en nuestra página web, y el primer paso es crear dos directorios iniciales, static y templates. Crearemos un nuevo directorio que contendrá nuestras imágenes dentro de la carpeta static.

El siguiente paso es obtener la dirección de esta carpeta IMG que creamos dentro de la carpeta static. Así que tenemos que importar la biblioteca os y usarla para guardar la ruta de la carpeta IMG en una nueva variable llamada IMG_FOLDER.

IMG_FOLDER = os.path.join("static", "IMG")

Tendremos que pasar esta dirección a la carpeta de carga de configuración de la aplicación. Así que tenemos que ir dentro de UPLOAD_FOLDER y asignar la dirección donde queremos ver las imágenes.

app.config["UPLOAD_FOLDER"] = IMG_FOLDER

En el siguiente paso, uniremos la ruta usando UPLOAD_FOLDER con un nombre de imagen que queremos mostrar en la página web. Guardaremos esta dirección en la variable Flask_Logo dentro de la función Display_IMG().

Flask_Logo = os.path.join(app.config["UPLOAD_FOLDER"], "flask-logo.png")

A continuación, necesitaremos definir un argumento dentro de render_template() y pasarle la variable Flask_Logo como valor.

from flask import Flask, render_template
import os

app = Flask(__name__)

IMG_FOLDER = os.path.join("static", "IMG")

app.config["UPLOAD_FOLDER"] = IMG_FOLDER


@app.route("/")
def Display_IMG():
    Flask_Logo = os.path.join(app.config["UPLOAD_FOLDER"], "flask-logo.png")
    return render_template("index.html", user_image=Flask_Logo)


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

Ahora necesitaremos ir a la carpeta templates y crear un archivo index.html, y dentro de este archivo, escribiremos el código HTML básico. Solo pasaremos la variable user_image en la etiqueta img que definimos en render_template().

Este es el código fuente utilizado en el archivo HTML para este ejemplo:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello Worl!</title>
</head>
<body>
<h1>Hello World!</h1>
 <center><h3>Flask Logo</h3><img src="{{ user_image }}" alt="Mike" height="240px" width="300px"></center>
</body>
</html>

Cuando ejecutemos esta aplicación, veremos que la imagen se muestra correctamente.

Salida de imagen de pantalla de Flask 1

Mostrar varias imágenes en la aplicación Flask

Ahora agregaremos varias imágenes de la carpeta IMG y le mostraremos cómo puede mostrarlas todas, así que comencemos haciendo una lista de las imágenes. Crearemos esta lista dentro de la función que contendrá todos los activos de un directorio usando la función listdir(), y el nombre de la lista será IMG_LIST.

IMG_LIST = os.listdir("static/IMG")

Ahora crearemos un bucle para todas las imágenes, usaremos la comprensión de listas y lo almacenaremos en la misma variable llamada IMG_LIST.

from flask import Flask, render_template
import os

app = Flask(__name__)

IMG_FOLDER = os.path.join("static", "IMG")

app.config["UPLOAD_FOLDER"] = IMG_FOLDER


@app.route("/")
def Display_IMG():
    IMG_LIST = os.listdir("static/IMG")
    IMG_LIST = ["IMG/" + i for i in IMG_LIST]
    return render_template("index.html", imagelist=IMG_LIST)


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

El siguiente paso es realizar algunos cambios en el archivo HTML. En lugar de pasarlos uno por uno, los mostraremos a través del bucle usando una variable imagelist que es una lista de múltiples imágenes.

Ahora pondremos una etiqueta img, y dentro de esta etiqueta, usaremos la etiqueta url_for para obtener archivos estáticos. url_for() tomará dos atributos: uno será static, y el segundo será el filename, y le pasaremos un elemento i que estamos iterando a través del ciclo.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello Worl!</title>
</head>
<body>
<h1>The Multiple Images</h1>
    {% for i in imagelist %}
    <img src = "{{ url_for('static', filename=i)}}">
    {% endfor %}
</body>
</html>

Cuando ejecutamos el servidor y vamos al navegador, podemos ver las múltiples imágenes que se muestran aquí.

Salida de imagen de pantalla de Flask 2

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn