我修改了flaskr sample app的登录,第一行获取错误。但www.html在模板目录中。
return redirect(url_for('www'))
#return redirect(url_for('show_entries'))
显示错误:
werkzeug.routing.BuildError
BuildError: ('www', {}, None)
答案 0 :(得分:136)
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
答案 1 :(得分:3)
假设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!')
答案 2 :(得分:2)
我遇到了这个错误
BuildError :(“ project_admin”,{},无)
当我打个电话
时 return redirect(url_for('project_admin'))
我试图在我的蓝图中引用project_admin
函数。为了解决该错误,我在函数名称之前添加了一个点,如下所示:
return redirect(url_for('.project_admin'))
瞧,我的问题解决了。