在模板文件夹中重命名 html 文件后"werkzeug.routing.BuildError" Python 烧瓶



我的烧瓶服务器的行为非常奇怪,我有一条这样的路线

@app.route('/login' , methods=['GET' , 'POST'])
def register():
return render_template('login.html')

这很好,当我要求的时候就给了我页面但随后我将文件名重命名为";register.html";

@app.route('/register' , methods=['GET' , 'POST'])
def register():
return render_template('register.html')

现在这给了我一个错误:werkzeug.routing.BuildError:无法为端点"/register"构建url。你的意思是"注册"吗?

现在我多次尝试用不同的名称更改路线路径:

@app.route('/anypathname' , methods=['GET' , 'POST'])
def register():
return render_template('register.html')

它仍然给我错误:werkzeug.routing.BuildError:无法为端点"/register"生成url。你的意思是"注册"吗?

这个错误不应该说";werkzeug.routing.BuildError:无法为终结点"/anypathname"生成url。你的意思是"任何路径名"吗">

我试图重新启动服务器清除浏览器缓存,flask在代码更改时自动重新加载,它的调试器也在工作。但它仍然给我这个错误

这是我的用户注册的简单示例。由于长度的原因,代码稍微减少了一点。也许这会对你有所帮助。

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, PasswordField
from wtforms.validators import InputRequired, Length, EqualTo, Regexp, Email
from wtforms.validators import ValidationError
class RegistrationForm(FlaskForm):
username = StringField(
'Username',
validators=[
InputRequired(),
Length(3,20),
Regexp(
'^[A-Za-z][A-Za-z0-9_.]*$',
message='Username must have only letters, numbers, dots or underscores.')
],
)
email = StringField(
'E-Mail',
validators=[
InputRequired(),
Email()
],
)
password = PasswordField(
'Password',
validators=[
InputRequired(),
EqualTo('password_confirm',
message='Password confirmation invalid.')
],
)
password_confirm = PasswordField(
'Password Confirmation',
validators=[
InputRequired(),  
],
)
submit = SubmitField('Register')
def validate_email(self, field):
if User.query.filter_by(email=field.data).first():
raise ValidationError('Email already registered.')
def validate_username(self, field):
if User.query.filter(User.username.ilike(field.data)).first():
raise ValidationError('Username already in use.')
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm(request.form)
if form.validate_on_submit():
try:
user = User()
form.populate_obj(user)
db.session.add(user)
db.session.commit()
else:
flash("Your user has been created, please login.", category="success")
return redirect(url_for('auth.login'))
return render_template('register.html', form=form)
# ... (login, etc.)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Flask App</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
</head>
<body>
<form method="POST">
{{ form.csrf_token }}
<div class="form-group">
{{ form.email.label() }}
{{ form.email(class='form-control') }}
</div>
<div class="form-group">
{{ form.username.label() }}
{{ form.username(class='form-control') }}
</div>
<div class="form-group">
{{ form.password.label() }}
{{ form.password(class='form-control') }}
</div>
<div class="form-group">
{{ form.password_confirm.label() }}
{{ form.password_confirm(class='form-control') }}
</div>
{{ form.submit(class='btn btn-primary btn-block') }}
</form>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
</body>
</html>

我指的是"寄存器";在";a";标签链接在";register.html";但它应该是";寄存器";而不是"/寄存器";

<a href="{{ url_for('register') }}"><button class="login-btn">Register</button></a>
not:
<a href="{{ url_for('/register') }}"><button class="login-btn">Register</button></a>
```html

相关内容

最新更新