Flask应用提交表单时触发AttributeError问题求助
Flask表单提交AttributeError问题排查
你的代码与错误信息
路由代码
@app.route('/add_song', methods=['GET', 'POST']) def add_song(): form = SongForm() if form.validate_on_submit(): song = Song( title=form.title.data, artist=form.artist.data, album=form.album.data ) db.session.add(song) db.session.commit() return redirect(url_for('index')) return render_template('add_song.html', form=form)
表单类代码(form.py)
from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired class SongForm(FlaskForm): title = StringField('Title', validators=[DataRequired()]) artist = StringField('Artist', validators=[DataRequired()]) album = StringField('Album', validators=[DataRequired()]) submit = SubmitField('Add Song')
错误信息
AttributeError: 'SongForm' object has no attribute 'title'
排查与解决方法
核对表单类的导入与字段拼写
确认路由里的导入语句正确,比如表单文件是form.py时,要写from form import SongForm,别写错文件名或类名(比如大小写错误)。同时检查表单类内的字段名,确保title/artist/album没有笔误,比如别写成titile这类错误拼写。确认表单实例化方式
必须在路由里写form = SongForm()(带括号实例化),要是写成form = SongForm(不带括号),操作的是类本身而非实例对象,自然找不到title这类字段属性。检查模板里的字段调用
如果错误出现在模板渲染阶段,确认模板里的字段调用方式正确,比如用{{ form.title() }}渲染输入框、{{ form.title.label }}渲染标签,不要调用不存在的属性。验证Flask-WTF版本与继承类
若使用新版Flask-WTF(1.0.0及以上),表单类必须继承FlaskForm,不要继承旧版的Form,否则会出现字段绑定异常,导致找不到属性。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

