加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Flask WTF’StringField’对象没有属性’translate’

发布时间:2020-12-20 11:51:26 所属栏目:Python 来源:网络整理
导读:我是 Python的新手,我一直关注 Miguel Grinberg Flask Mega-Tutorial. 我有一个非常简单的表单,当我尝试提交时,我收到以下错误: AttributeError: ‘StringField’ object has no attribute ‘translate’ 这是表格: from flask.ext.wtf import Formfrom wt
我是 Python的新手,我一直关注 Miguel Grinberg Flask Mega-Tutorial.

我有一个非常简单的表单,当我尝试提交时,我收到以下错误:

AttributeError: ‘StringField’ object has no attribute ‘translate’

这是表格:

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是一个字符串方法,所以它建议某些不是字符串的东西被传递给需要字符串的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读