2010-09-10 5 views
52

Je modifie le login de l'application exemple flaskr, la première ligne obtient une erreur. Mais www.html est dans le répertoire de modèle.Erreur flasque: werkzeug.routing.BuildError

return redirect(url_for('www')) 
#return redirect(url_for('show_entries')) 

erreur d'affichage:

werkzeug.routing.BuildError 

BuildError: ('www', {}, None) 

Merci pour l'aide!

Répondre

117

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') 

url_for recherche une fonction, vous passez le nom de la fonction que vous êtes désireux d'appeler. 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 du commentaire de shuaiyuancn ci-dessous, si vous utilisez des blueprints, url_for doit être appelé url_for(blueprint_name.func_name). See documentation here.

+0

Je vois, vraiment merci beaucoup bvmou veru. – chenge

+12

+1 pour un exemple très clair ... et pour "rien de plus fort que le gin avant le petit-déjeuner" –

+0

Enlightening! Je pensais que l'argument est l'url .. – swdev

1

En supposant que def www(): est déjà défini (comme suggéré par la réponse géniale de unmounted), cette erreur peut également être levée si vous utilisez un plan qui n'a pas été enregistré.

Assurez-vous de les enregistrer lorsque app est instancié pour la première fois. 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 lesmy_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!') 
Questions connexes