Ошибка колбы: werkzeug.routing.BuildError - PullRequest
59 голосов
/ 10 сентября 2010

Я изменяю логин примера приложения flaskr, в первой строке выдается ошибка.Но www.html находится в шаблоне dir.

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

ошибка отображения:

werkzeug.routing.BuildError

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

Ответы [ 3 ]

136 голосов
/ 10 сентября 2010

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') Обратите внимание, что вы не передаете объект, а скорее строку. См. Документацию здесь .

3 голосов
/ 23 августа 2017

Если предположить, что def www(): уже определено (как предполагает удивительный ответ unmounts), эта ошибка также может быть выдана , если вы используете проект, который не был зарегистрирован.

Обязательно зарегистрируйте их при первом создании 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 голосов
/ 27 октября 2018

Я столкнулся с этой ошибкой

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

, когда мне звонили как

return redirect(url_for('project_admin'))

, в котором я пытался сослаться на функцию project_admin в моем Blueprint.Чтобы устранить ошибку, я добавил точку перед именем функции, например:

return redirect(url_for('.project_admin'))

и вуаля, моя проблема была решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...