Flask Fehler: werkzeug.routing.BuildError
Frage
ich das Login von flaskr Beispielanwendung ändern, den ersten Zeile get Fehler. Aber www.html ist in der Vorlage Richt.
return redirect(url_for('www'))
#return redirect(url_for('show_entries'))
Anzeigefehler:
werkzeug.routing.BuildError
BuildError: ('www', {}, None)
Lösung
return redirect(url_for('www'))
funktionieren würde, wenn Sie eine Funktion irgendwo anders aussehen:
@app.route('/welcome')
def www():
return render_template('www.html')
url_for
Aussehen für eine Funktion, übergeben Sie es dem name der Funktion, die Sie Aufruf fehlen. Betrachten Sie es wie folgt aus:
@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'
Sie können auch return redirect('/some-url')
tun, wenn die leichter zu merken sind. Es ist auch möglich, dass das, was Sie wollen, ist Ihre erste Linie gegeben, ist nur return render_template('www.html')
.
Und auch nicht von shuaiyuancn Kommentar unten, wenn Sie Pläne verwenden, sollte url_for
als url_for('blueprint_name.func_name')
aufgerufen werden Hinweis: Sie werden das Objekt nicht vorbei, sondern die Zeichenfolge. Siehe Dokumentation hier //flask.pocoo.org/docs/1.0/blueprints/#building-urls
Andere Tipps
, dass def www():
Unter der Annahme, bereits definiert ist (wie von post ehrfürchtige Antwort vorgeschlagen), kann dieser Fehler auch geworfen werden , wenn Sie eine Vorlage verwenden, die nicht registriert worden ist.
Stellen Sie sicher, diese zu registrieren, wenn app
zuerst instanziiert. Für mich war es so gemacht:
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)
Und innerhalb 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!')
Ich kam in diesem Fehler
BuildError: ( 'project_admin', {}, None)
, wenn ich habe einen Anruf wie
return redirect(url_for('project_admin'))
, in dem ich versuche, wurde die project_admin
Funktion in meinem Blueprint zu verweisen. Um den Fehler zu beheben, habe ich einen Punkt vor dem Namen der Funktion, wie folgt aus:
return redirect(url_for('.project_admin'))
und voila, mein Problem gelöst wurde.