Подтвердить что ты не робот

Ошибка колбы: werkzeug.routing.BuildError

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

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

ошибка дисплея:

werkzeug.routing.BuildError

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

Ответ 1

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

Ответ 2

Предполагая, что def www(): уже определен (как предложено с помощью unmounted awesome answer), эта ошибка также может быть выбрана, если вы используете проект, который не был зарегистрирован.

Обязательно зарегистрируйте их, когда 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!')

Ответ 3

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

BuildError: ('project_admin', {}, Нет)

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

return redirect(url_for('project_admin'))

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

return redirect(url_for('.project_admin'))

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