python – Flask WTF’StringField’对象没有属性’translate’
我是
Python的新手,我一直关注
Miguel Grinberg Flask Mega-Tutorial.
我有一个非常简单的表单,当我尝试提交时,我收到以下错误:
这是表格: from flask.ext.wtf import Form from wtforms import StringField from wtforms.validators import DataRequired class CreateSubjectForm(Form): name = StringField('name',validators=[DataRequired()]) 和views.py: @app.route('/create_subject',methods=['GET','POST']) def create_subject(): form = CreateSubjectForm() if form.validate_on_submit(): subject = Subject(name=form.name) db.session.add(subject) db.session.commit() return render_template('create_subject.html',title='Create Subject',form=form) 我的模板如下: {% extends "base.html" %} {% block content %} <h2>Create Subject</h2> <form action="" method="post" name="create_subject"> {{ form.hidden_tag() }} <div class="form-control-label">Name: </div> <div class="form-control">{{ form.name(size=45) }}</div> <input type="submit" value="Create"> </form> {% endblock %} 我一直无法解决这个问题,但这就是我所看到的. PyCharm告诉我它无法在flask.ext.wtf导入Form的行中找到flask.ext中的wtf,这引起了一个担忧.我使用的是Python 2.7.从研究看来,这是导入2.7的正确方法.我尝试将其更改为来自flask_wtf导入Form并且PyCharm错误消失,但行为是相同的. 从追溯我认为看起来版本和软件包出了问题.我仔细检查我用pip.install安装了所有东西,看起来我做了 – 这是来自虚拟环境的pip.freeze: Babel==2.2.0 blinker==1.4 coverage==4.0.3 decorator==4.0.9 Flask==0.10.1 Flask-Babel==0.9 Flask-Login==0.3.2 Flask-Mail==0.9.1 Flask-OpenID==1.2.5 Flask-SQLAlchemy==2.1 Flask-WhooshAlchemy==0.56 Flask-WTF==0.12 flipflop==1.0 guess-language==0.2 itsdangerous==0.24 Jinja2==2.8 MarkupSafe==0.23 pbr==1.8.1 PyMySQL==0.7.2 python-openid==2.2.5 pytz==2016.3 six==1.10.0 speaklater==1.3 SQLAlchemy==1.0.12 sqlalchemy-migrate==0.10.0 sqlparse==0.1.19 Tempita==0.5.2 Werkzeug==0.11.5 Whoosh==2.7.3 WTForms==2.1 这是追溯: > Traceback (most recent call last): File > "C:Userstimnionedrivedevstudyplannervenvlibsite-packagesflaskapp.py",> line 1836,in __call__ > return self.wsgi_app(environ,start_response) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagesflaskapp.py",> line 1820,in wsgi_app > response = self.make_response(self.handle_exception(e)) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagesflaskapp.py",> line 1403,in handle_exception > reraise(exc_type,exc_value,tb) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagesflaskapp.py",> line 1817,in wsgi_app > response = self.full_dispatch_request() File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagesflaskapp.py",> line 1477,in full_dispatch_request > rv = self.handle_user_exception(e) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagesflaskapp.py",> line 1381,in handle_user_exception > reraise(exc_type,> line 1475,in full_dispatch_request > rv = self.dispatch_request() File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagesflaskapp.py",> line 1461,in dispatch_request > return self.view_functions[rule.endpoint](**req.view_args) File "C:Userstimnionedrivedevstudyplannerappviews.py",line 24,in > create_subject > db.session.commit() File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormscoping.py",> line 157,in do > return getattr(self.registry(),name)(*args,**kwargs) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormsession.py",> line 801,in commit > self.transaction.commit() File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormsession.py",> line 392,in commit > self._prepare_impl() File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormsession.py",> line 372,in _prepare_impl > self.session.flush() File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormsession.py",> line 2019,in flush > self._flush(objects) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormsession.py",> line 2137,in _flush > transaction.rollback(_capture_exception=True) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyutillanghelpers.py",> line 60,in __exit__ > compat.reraise(exc_type,exc_tb) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormsession.py",> line 2101,in _flush > flush_context.execute() File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormunitofwork.py",> line 373,in execute > rec.execute(self) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormunitofwork.py",> line 532,in execute > uow File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormpersistence.py",> line 174,in save_obj > mapper,table,insert) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyormpersistence.py",> line 800,in _emit_insert_statements > execute(statement,params) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyenginebase.py",> line 914,in execute > return meth(self,multiparams,params) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemysqlelements.py",> line 323,in _execute_on_connection > return connection._execute_clauseelement(self,params) File > "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyenginebase.py",> line 1010,in _execute_clauseelement > compiled_sql,distilled_params File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyenginebase.py",> line 1146,in _execute_context > context) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyenginebase.py",> line 1344,in _handle_dbapi_exception > util.reraise(*exc_info) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyenginebase.py",> line 1139,in _execute_context > context) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagessqlalchemyenginedefault.py",> line 450,in do_execute > cursor.execute(statement,parameters) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagespymysqlcursors.py",> line 156,in execute > query = self.mogrify(query,args) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagespymysqlcursors.py",> line 135,in mogrify > query = query % self._escape_args(args,conn) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagespymysqlcursors.py",> line 115,in _escape_args > return dict((key,conn.escape(val)) for (key,val) in args.items()) File > "C:Userstimnionedrivedevstudyplannervenvlibsite-packagespymysqlcursors.py",in <genexpr> > return dict((key,val) in args.items()) File > "C:Userstimnionedrivedevstudyplannervenvlibsite-packagespymysqlconnections.py",> line 781,in escape > return escape_item(obj,self.charset,mapping=mapping) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagespymysqlconverters.py",> line 26,in escape_item > val = encoder(val,mapping) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagespymysqlconverters.py",> line 109,in escape_unicode > return u"'%s'" % _escape_unicode(value) File "C:Userstimnionedrivedevstudyplannervenvlibsite-packagespymysqlconverters.py",> line 72,in _escape_unicode > return value.translate(_escape_table) AttributeError: 'StringField' object has no attribute 'translate' 所以在这一点上我很难过.任何帮助将非常感谢.谢谢. 解决方法
发生错误的原因是正在使用StringField实例构造Subject实例,但需要的是StringField数据的值.
而不是 subject = Subject(name=form.name) # form.name is a StringField 做 subject = Subject(name=form.name.data) 线索在异常消息AttributeError中:’StringField’对象没有属性’translate’ – translate是一个字符串方法,所以它建议某些不是字符串的东西被传递给需要字符串的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |