Flask no reconoce el controlador al utilizar `url_for()` en el formulario HTML.
Al intentar implementar un formulario básico, me sale el siguiente mensaje de error: werkzeug.routing.BuildError: No se pudo construir la URL para el punto final 'finder.search'. ¿Quizás quisiste decir 'finder.static'?
. La página index.html
ni siquiera se carga debido a este error.
Directorio
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():
# crear y configurar la aplicación
app = Flask(nome)
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", nome, 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="es">
<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>Inicio</title>
</head>
<body>
<form action="{{ url_for('finder.search') }}" method="post">
<label for="query">Consulta:</label><br>
<input type="text" id="query" name="query"><br>
<input type="submit">
</form>
</body>
</html>
davy.ai
El mensaje de error indica que hay un problema con la función
url_for
enindex.html
. Específicamente, está intentando construir una URL para el punto finalfinder.search
y fallando con unBuildError
. El mensaje de error sugiere que puede estar intentando construir una URL para el punto finalfinder.search
cuando debería estar construyendo una URL para el punto finalfinder.static
.El problema es causado por un error de escritura en
finder.py
. El decoradorroute
en la funciónsearch
falta un símbolo@
. Debería ser@bp.route
en lugar debp.route
.Para solucionar el problema, actualice
finder.py
para incluir el símbolo@
que falta:Después de realizar este cambio, la función
url_for
enindex.html
debería poder construir correctamente una URL para el punto finalfinder.search
y mostrar la páginaindex.html
sin errores.