2010-09-10 194 views
52

我修改flaskr示例應用程序的登錄,第一行出現錯誤。但www.html位於模板目錄中。燒瓶錯誤:werkzeug.routing.BuildError

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

顯示錯誤:

werkzeug.routing.BuildError 

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

感謝您的幫助!如果你有一個函數在其他地方像這樣

回答

117

return redirect(url_for('www'))將工作:

@app.route('/welcome') 
def www(): 
    return render_template('www.html') 

url_for查找功能,給它傳遞名字你想調用的函數的。想想看這樣的:

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

你也可以做return redirect('/some-url'),如果是更容易記住。根據你的第一行,你想要的只是return render_template('www.html')

另外,不是來自shuaiyuancn的評論,如果你正在使用藍圖,url_for應該被調用爲url_for(blueprint_name.func_name)See documentation here

+0

我明白了,真的很感謝你們bvmou veru得多。 – chenge 2010-09-10 10:04:35

+12

+1一個非常明確的例子...和「早餐前沒有比杜松子酒更強烈」 – 2010-09-10 15:47:09

+0

啓發!我認爲參數是網址.. – swdev 2013-09-26 01:36:48

1

假設def www():已被定義(如未安裝的真棒答案所示),如果您正在使用尚未註冊的藍圖,則也會拋出此錯誤

確保在app第一次實例化時註冊這些。對我來說,做這樣的:

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) 

並在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!')