65

我修改了flaskr示例应用程序的登录,第一行出错。但是 www.html 在模板目录中。

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

显示错误:</p>

werkzeug.routing.BuildError

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

3 回答 3

152

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') 注意您不是在传递对象,而是在传递字符串。 请参阅此处的文档

于 2010-09-10T09:31:36.827 回答
4

假设def www():已经定义(如 unmounted 的出色答案所建议的那样),如果您使用尚未注册的蓝图,也可能会引发此错误。

确保在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!')
于 2017-08-22T22:39:23.627 回答
3

我遇到了这个错误

构建错误:('project_admin',{},无)

当我接到一个电话时

return redirect(url_for('project_admin'))

我试图project_admin在我的蓝图中引用该函数。为了解决该错误,我在函数名称前添加了一个点,如下所示:

return redirect(url_for('.project_admin'))

瞧,我的问题解决了。

于 2018-10-26T21:29:42.440 回答