Estoy desarrollando una aplicación WEB con Python y Flask. Quiero mostrar una imagen usando una etiqueta de imagen html y una etiqueta de botón para abrir el navegador y elegir una imagen y mostrarla dentro de la etiqueta actualizándola usando Jinja. ¿Cómo podría hacer eso?
principal.py:
'''
image_filepath = '' def browse_img_file(): global image_filepath path = easygui.fileopenbox(msg="", title="choose an image", multiple=False, filetypes=['.png', '.jpg', '.gif']) image_filepath = path @app.route("/") def index(): global image_filepath if image_filepath == '': image_load = url_for('static', filename='/images/no-img.png') else: image_load = image_filepath return render_template("index.html", image=image_load) @app.route("/upload") def upload(): global image_filepath try: browse_img_file() except: pass finally: return redirect(url_for("index"))índice.html:
<div id="CONTENT"> <p>Choose your image.</p> <div class="img"> <image src="{{ image }}"></image> </div> <a href="{{ url_for('upload', image=image) }}"> <button type="button" class="btn btn-primary">Upload an image</button> </a> </div>'''
Creo que la solución es usar <input> en lugar de <a> aquí:
<div id="CONTENT"> <p>Choose your image.</p> <div class="img"> <image src="{{ image }}"></image> </div> <!-- <a href="{{ url_for('upload', image=image) }}"> --> <input type="file"> <button type="button" class="btn btn-primary">Upload an image</button> </a> </div>fuente: W3Schools
Cuando está llamando a la ruta 'cargar', solo está devolviendo la página 'índice'. ¿No se supone que también debes devolver image_path para que jinja cargue la 'imagen'?
return render_template("index.html", image=image_filepath) Creo que devolver esto desde la ruta de 'carga' debería funcionar. 