0

I am following this video to create an image gallery using flask and python https://www.youtube.com/watch?v=yO_XNCsBIsg&t=636s

I these github files for (coppied the @app.route('/gallery')) app.py and gallery.html and ran the exact code but I am getting an error:

werkzeug.routing.BuildError: Could not build url for endpoint 'send_image' with values ['filename']. Did you mean 'index' instead?

Here is my exact code

main.py

#!/usr/bin/env python


from flask import Flask, request, send_from_directory, flash, redirect, render_template, request, url_for,jsonify

#https://stackoverflow.com/questions/32019733/getting-value-from-select-tag-using-flask

# reference to code is from https://pythonprogramming.net/jquery-flask-tutorial/
# and from https://www.blog.pythonlibrary.org/2017/12/13/flask-101-how-to-add-a-search-form/
app = Flask(__name__)

# this runs in the background for registering the compnay link that was put in
@app.route('/background_process')
def background_process():

    lang = request.args.get('proglang', 0, type=str)
    #just checking what was typed, this will be put into a python code eventrually
    return jsonify(result=lang)


@app.route('/')
def index():

    return render_template('interactive.html', data=[{'name':'red'}, {'name':'green'}, {'name':'blue'}])

    filename = request.args.get('proglang')


@app.route("/black" , methods=['GET', 'POST'])
def black():
    select = request.form.get('comp_select')
    if select=="blue":
        return(str("hi")) # just to see what select is
    else:
         return(str("bye"))
import os

@app.route('/gallery')
def get_gallery():
    image_names = os.listdir('./images')
    print(image_names)
    return render_template("gallery.html", image_names=image_names)

if __name__=='__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

gallery.html

  <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
          integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

</head>
<body>
<div class="container">

    <div class="row">

        <div class="col-lg-12">
            <h1 class="page-header">Thumbnail Gallery</h1>
        </div>
        {{image_names}}
        <hr>
        {% for image_name in image_names %}
        <div class="col-lg-3 col-md-4 col-xs-6 thumb">
            <img class="img-responsive" src=" {{url_for('send_image', filename=image_name)}}">
        </div>
        {% endfor %}
    </div>
</div>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
        integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
        crossorigin="anonymous"></script>

</body>
</html>

I'm leaving out my other html files because they aren't needed for my testing of the gallery route.

Bob
  • 279
  • 6
  • 13

1 Answers1

1

You are missing the "send_image" route in your Python code:

@app.route('/upload/<filename>')
def send_image(filename):
    return send_from_directory("images", filename)
Matt Healy
  • 18,033
  • 4
  • 56
  • 56