erreur Flask: werkzeug.routing.BuildError
Question
Je modifier la connexion de l'application de l'échantillon de flaskr, la première erreur get ligne. Mais www.html est dans le modèle dir.
return redirect(url_for('www'))
#return redirect(url_for('show_entries'))
erreur d'affichage:
werkzeug.routing.BuildError
BuildError: ('www', {}, None)
La solution
return redirect(url_for('www'))
fonctionnerait si vous avez une fonction un autre endroit comme celui-ci:
@app.route('/welcome')
def www():
return render_template('www.html')
ressemble url_for
pour une fonction, vous transmettez-lui le nom de la fonction que vous êtes désireux d'appel. Pensez-y comme ceci:
@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'
Vous pouvez également faire return redirect('/some-url')
, si cela est plus facile à retenir. Il est également possible que ce que vous voulez, étant donné votre première ligne, est juste return render_template('www.html')
.
Et aussi, pas de commentaire de shuaiyuancn ci-dessous, si vous utilisez des plans, url_for
doit être invoquée comme url_for('blueprint_name.func_name')
Notez que vous n'êtes pas passer l'objet, plutôt la chaîne. Voir la documentation
Autres conseils
En supposant que def www():
est déjà défini (comme l'a suggéré de réponse non montés) impressionnante, cette erreur peut également être catapultés si vous utilisez un plan qui n'a pas été enregistré.
Assurez-vous d'inscrire ces derniers quand app
est d'abord instancié. Pour moi, il a été fait comme ceci:
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)
Et dans les 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!')
Je suis tombé sur cette erreur
BuildError: ( 'project_admin', {}, None)
quand j'avais un appel comme
return redirect(url_for('project_admin'))
dans lequel je tentais de faire référence à la fonction project_admin
dans mon Plan. Pour résoudre l'erreur, j'ai ajouté un point avant le nom de la fonction, comme ceci:
return redirect(url_for('.project_admin'))
et le tour est joué, mon problème a été résolu.