gpt4 book ai didi

python - 获取 werkzeug.routing.BuildError

转载 作者:太空狗 更新时间:2023-10-30 02:11:07 24 4
gpt4 key购买 nike

当我转到我的“login.html”页面时,我收到了一个 werkzeug.routing.BuildError。问题似乎是模板中的“action=”属性。最初是 action={{url_for('login')}}。虽然docs show it done this way它似乎不起作用。当我将其更改为 action="/login"action="#" 时,它可以正常工作。问题是为什么?我的印象是正确的方法是 action={{url_for('login')}}?

在我将我的代码分解成包(所有内容都在单个 py 文件中)之前,它工作正常。

顺便说一句,大部分代码来自 Miguel Grindberg 的名著“Flask Web Development”。我遇到问题的代码是我自己的代码,是我在本书中添加的。我在 WinXP 上使用最新的 Flask。下面是我的代码:

flasky\app\main\views.py:

from flask import render_template, session, redirect, url_for, current_app, flash
from .. import db
from ..models import User
from ..email import send_email, post_mail
from . import main
from .forms import NameForm, RegForm


@main.route('/login', methods=['GET', 'POST'])
def login():
form = RegForm()
if form.validate_on_submit():
session['name'] = form.username.data
session['logged_in'] = True
return redirect(url_for('success'))
return render_template('login.html', form=form)

flasky\app\templates\login.html:

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}Sign Up{% endblock %}


{% block content %}
{{ super() }}

<div class="well">
<h1 align="center">Sign-In</h1>
</div>

<div class="container">
<form class="form form-horizontal" action="{{url_for('login')}}" method="post">
{{form.hidden_tag()}}

{{wtf.form_field(form.username)}}

{{wtf.form_field(form.email)}}

{{wtf.form_field(form.password)}}

{{wtf.form_field(form.bool)}}

{{wtf.form_field(form.submit)}}
</form>
</div>
{% endblock %}

<!-- action= {{url_for('login')}} doesn't work. . ."#" and "\login" work-->

flasky\app\main\forms.py:

from flask.ext.wtf import Form
from wtforms import StringField, SubmitField, PasswordField, BooleanField, SubmitField
from wtforms.validators import Required, Email

class RegForm(Form):
username = StringField('Username', validators=[Required()])
email = StringField('Email Address', validators=[Email()])
password = PasswordField('Password', validators=[Required()])
bool = BooleanField("I Agree To Your Terms of Services", validators=[Required()])
submit = SubmitField('Submit')

最佳答案

url_for() 方法无法找到符合描述的端点时,将引发 BuildError。在这种情况下,没有发现任何 login 端点已注册到 Flask app 对象。

您似乎已经使用名为 mainBlueprint 注册了 login 路由;您需要在端点名称中使用蓝图名称:

{{ url_for('main.login') }}

如果模板只被 main 蓝图中的路由使用,您也可以通过以 开头的名称使其成为相对的。:

{{ url_for('.login') }}

参见 Building URLs section蓝图文档。

关于python - 获取 werkzeug.routing.BuildError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24718141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com