Reputation: 303
When trying to implement a basic form I get the following error message: werkzeug.routing.BuildError: Could not build url for endpoint 'finder.search'. Did you mean 'finder.static' instead?
, the index.html
page does not even load because of this error.
Directory
Steam
SteamFinder
static
style.css
templates
index.html
result.html
__init__.py
finder.py
venv
init.py
from flask import Flask
from flask.templating import render_template
def create_app():
# create and configure the app
app = Flask(__name__)
from . import finder
app.register_blueprint(finder.bp)
@app.route("/")
def home():
return render_template("index.html")
return app
finder.py
from flask import Blueprint, request
from flask.templating import render_template
bp = Blueprint("finder", __name__, template_folder="templates", static_folder="static")
bp.route("/search", methods=["POST"])
def search():
query = request.form["query"]
print(query)
return render_template("result.html")
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="../static/style.css"/>
<title>Home</title>
</head>
<body>
<form action="{{ url_for('finder.search') }}" method="post">
<label for="query">Query:</label><br>
<input type="text" id="query" name="query"><br>
<input type="submit">
</form>
</body>
</html>
Upvotes: 1
Views: 702
Reputation: 6685
You cannot use the url_for
directly in the template, Jinja cannot process it. You should pass it as a variable to the render_template
function and use that variable name in the jinja block.
Example:
return render_template("index.html", form_action_url=url_for('finder.search'))
and the form's action will be:
<form action="{{ form_action_url }}" method="post">
<label for="query">Query:</label><br>
<input type="text" id="query" name="query"><br>
<input type="submit">
</form>
Upvotes: 2