es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>
Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un problema con la función url_for en index.html. Específicamente, está intentando construir una URL para el punto final finder.search y fallando con un BuildError. El mensaje de error sugiere que puede estar intentando construir una URL para el punto final finder.search cuando debería estar construyendo una URL para el punto final finder.static.

    El problema es causado por un error de escritura en finder.py. El decorador route en la función search falta un símbolo @. Debería ser @bp.route en lugar de bp.route.

    Para solucionar el problema, actualice finder.py para incluir el símbolo @ que falta:

    @bp.route("/search", methods=["POST"])
    def search():
        query = request.form["query"]
        print(query)
        return render_template("result.html")
    

    Después de realizar este cambio, la función url_for en index.html debería poder construir correctamente una URL para el punto final finder.search y mostrar la página index.html sin errores.

Comments are closed.