Frasco de error: werkzeug.routing.BuildError
Pregunta
Me modificar el inicio de sesión de aplicación de ejemplo flaskr, el primer error de línea de conseguir. Pero www.html está en el directorio de plantilla.
return redirect(url_for('www'))
#return redirect(url_for('show_entries'))
Error de visualización:
werkzeug.routing.BuildError
BuildError: ('www', {}, None)
Solución
return redirect(url_for('www'))
funcionaría si tiene una función en otro lugar como este:
@app.route('/welcome')
def www():
return render_template('www.html')
miradas url_for
para una función, se le pasa el Nombre de la función que está deseando llamada. Piense en ello como esto:
@app.route('/login')
def sign_in():
for thing in login_routine:
do_stuff(thing)
return render_template('sign_in.html')
@app.route('/new-member')
def welcome_page():
flash('welcome to our new members')
flash('no cussing, no biting, nothing stronger than gin before breakfast')
return redirect(url_for('sign_in')) # not 'login', not 'sign_in.html'
También podría hacer return redirect('/some-url')
, si eso es más fácil de recordar. También es posible que lo que quiere, dada su primera línea, es sólo return render_template('www.html')
.
Y también, no desde el comentario de shuaiyuancn a continuación, si está utilizando planos, url_for
debe ser invocada como url_for('blueprint_name.func_name')
Nota No está de paso del objeto, en lugar de la cadena. Véase la documentación aquí
Otros consejos
Si se asume que def www():
ya está definido (como lo sugiere sin montar de respuesta increíble), este error también puede ser lanzado si está utilizando un modelo que no ha sido registrada.
Asegúrese de registrar estos cuando se app
primera instancia. Para mí se ha hecho de esta manera:
from project.app.views.my_blueprint import my_blueprint
app = Flask(__name__, template_folder='{}/templates'.format(app_path), static_folder='{}/static'.format(app_path))
app.register_blueprint(my_blueprint)
Y dentro de my_blueprint.py
:
from flask import render_template, Blueprint
from flask_cors import CORS
my_blueprint = Blueprint('my_blueprint', __name__, url_prefix='/my-page')
CORS(my_blueprint)
@metric_retriever.route('/')
def index():
return render_template('index.html', page_title='My Page!')
Me encontré con este error
BuildError: ( 'project_admin', {}, Ninguna)
cuando tuve una llamada como
return redirect(url_for('project_admin'))
en la que yo estaba tratando de hacer referencia a la función project_admin
dentro de mi Blueprint. Para resolver el error, he añadido un punto antes del nombre de la función, así:
return redirect(url_for('.project_admin'))
y listo, mi problema fue solucionado.