[英]WTForms in Flask: UndefinedError: 'form' is undefined
I'm new to Flask and WTForms, and I cannot render my HTML page. 我是Flask和WTForms的新手,我无法呈现HTML页面。 I've been through the WTforms documentation again and again, but I can't find the source of the error:
我已经一次又一次地浏览了WTforms文档,但是找不到错误源:
jinja2.exceptions.UndefinedError, UndefinedError: 'form' is undefined
My code is below: 我的代码如下:
forms.py 表格
from flask.ext.wtf import Form
from wtforms import TextField, BooleanField, TextAreaField, StringField, PasswordField, SelectField, validators
class LoginForm(Form):
username = TextField('Username', [
validators.Required(),
validators.Length(min=4, max=25)
])
password = PasswordField('New Password', [
validators.Required()
])
app.py app.py
from forms import *
from wtforms import Form, fields, BooleanField, TextField, StringField, PasswordField, validators
from werkzeug.security import generate_password_hash, \
check_password_hash
@app.route('/login/', methods=['GET', 'POST'])
def login():
form = LoginForm(request.form)
if request.method == 'POST' and form.validate():
if load_user(form.username.data) is None:
flash('Invalid username')
else:
if check_password_hash(cred.password, form.password.data):
return redirect(url_for('browse'))
else:
flash('Invalid password')
return render_template('login.html', title='Login', form=form)
login.html login.html
{% extends "base.html" %}
{% block body %}
<form action="{{ url_for('login') }}" method="Post">
<fieldset>
<div>{{ form.username.label }}: {{ form.username() }}</div>
<div>{{ form.password.label }}: {{ form.password() }}</div>
<div class="form-group">
<button class="btn btn-default" type="submit">
<span aria-hidden="true" class="glyphicon glyphicon-log-in"></span>
Log In
</button>
</div>
</fieldset>
</form>
<div>
or <a href="new">Register</a> for an account
</div>
{% endblock %}
You still have to use the return
statement - for ex: 您仍然必须使用
return
语句-例如:
return render_template('login.html', title='Login', form=form)
in all your if-else
branches because, else, the form
context variable is not passed to the template. 在所有
if-else
分支中,因为否则, form
上下文变量未传递到模板。 The login
function should look like: login
功能应如下所示:
@app.route('/login/', methods=['GET', 'POST'])
def login():
form = LoginForm(request.form)
if request.method == 'POST' and form.validate():
if load_user(form.username.data) is None:
flash('Invalid username')
return render_template('login.html', title='Login', form=form)
else:
if check_password_hash(cred.password, form.password.data):
return redirect(url_for('browse'))
else:
flash('Invalid password')
return render_template('login.html', title='Login', form=form)
return render_template('login.html', title='Login', form=form)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.