【问题标题】:Flask: werkzeug.routing.BuildError烧瓶:werkzeug.routing.BuildError
【发布时间】:2022-01-03 13:52:46
【问题描述】:

我正在为一个项目创建一个健身房网站,但出现此错误:

werkzeug.routing.BuildError: Could not build url for endpoint 'memberships'. Did you mean 'membershipsub' instead?

我最初创建了一个名为“memberships”的模板,并在收到此错误后将其重命名为“membershipsub”(在所有文件中引用它的所有位置),但仍然收到此错误。

这是我构建模板的代码:

@app.route("/memberships", methods = ['GET', 'POST'])
def membershipsub():
    form = MembershipsubForm()
    plan1 = Membership_plan.query.filter_by(id=1).first()
    plan2 = Membership_plan.query.filter_by(id=2).first()
    plan3 = Membership_plan.query.filter_by(id=3).first()
    plan4 = Membership_plan.query.filter_by(id=4).first()
    plan5 = Membership_plan.query.filter_by(id=5).first()
    plan6 = Membership_plan.query.filter_by(id=6).first()
    plan7 = Membership_plan.query.filter_by(id=7).first()
    plan8 = Membership_plan.query.filter_by(id=8).first()
    plan9 = Membership_plan.query.filter_by(id=9).first()
    if form.validate_on_submit():
        age18 = ['18+ year', '18+ 6 month', '18+ month']
        age15 = ['15-17 year', '15-17 6 month', '15-17 month']
        age10 = ['10-14 year', '10-14 6 month', '10-14 month']
        if not (current_user.is_authenticated):
            flash('You need to have an account to subscribe to a membership', 'danger')
            return redirect(url_for('register'))
        elif (current_user.age >= 18) and (form.membershipsub.data not in age18):
            flash('You are not in the required age category to subscribe to this membership or this membership option is not available', 'danger')
        elif (14 < current_user.age < 18) and (form.membershipsub.data not in age15):
            flash('You are not in the required age category to subscribe to this membership or this membership option is not available', 'danger')
        elif (9 < current_user.age < 15 ) and (form.membershipsub.data not in age10):
            flash('You are not in the required age category to subscribe to this membership or this membership option is not available', 'danger')
        else:
            current_user.membership_plan = form.membershipsub.data
            current_user.membership_expiration_date = membership_expiration()
            db.session.commit()
            flash('You have now subscribed to this membership!', 'success')
            return redirect(url_for('mymembership'))       
    return render_template('membershipsub.html', title='Memberships', form=form, plan1=plan1, plan2=plan2, plan3=plan3, plan4=plan4, plan5=plan5, plan6=plan6, plan7=plan7, plan8=plan8, plan9=plan9)

另外,我没有使用蓝图,所以这不是问题。

【问题讨论】:

  • 这只是由于重命名了模板。尝试使用更新的名称重新创建项目,看看它是否仍然存在。

标签: python flask


【解决方案1】:

您的问题与模板名称无关。您需要的大部分信息都在错误消息中:

  • endpoint“会员”的 url 无法构建,通常是在端点(路由)不存在或无法找到的情况下。
  • 您会收到关于确实存在“membershipsub”(共享代码 sn-p 中的函数)的端点名称的建议

如果您没有类似于下面 sn-p 的代码,则可以解释您遇到的错误:

@app.route('/memberships')
def memberships():
    return render_template('template_name.html')

您必须检查您的代码并找到导致问题的对 url_for('memberships') 的调用,并将其更新为引用现有路由。

从您的问题中不清楚是哪个对url_for 的调用导致了问题。在您共享的代码 sn-p 中有 2 次对 url_for 的调用,但它们指的是“注册”和“会员资格”,而您的错误消息指的是“会员资格”所以 sn-p 需要更新或调用 @987654326 @ 在您的模板代码中,您尚未共享。

虽然您的问题并非完全重复,但已接受的答案 here 解释了您需要了解的大部分关于 url_for 工作原理的信息。 (以及其他使用方式)

请随时使用其他信息更新您的问题,我可以随时更新或删除此答案。

【讨论】:

  • 非常感谢。原来我在我的模板中使用了 url_for('memberships') 作为网站的总体布局。无论出于何种原因,当我对我的文件进行搜索时,它都没有出现。
猜你喜欢
  • 1970-01-01
  • 2011-04-10
  • 2021-12-04
  • 2018-10-02
  • 1970-01-01
  • 2016-07-04
  • 2021-05-17
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多