2013-07-12 23 views
5

私は、マイクロブログを書くためにFlaskフレームワークでPythonを使用しています。Python/Flaskフォームエラー - AttributeError: 'unicode'オブジェクトに '__call__'属性がありません

File "/home/akoppad/flaskblog/app/templates/base.html", line 27, in top-level template code 
{% block content %}{% endblock %} 
File "/home/akoppad/flaskblog/app/templates/edit.html", line 13, in block "content" 
[Display the sourcecode for this frame] [Open an interactive python shell in this frame] 
{{form.nickname(size=60)}} 

ここは私のコードです。

@app.route('/edit', methods=['GET','POST']) 
@login_required 
def edit(): 
    form=EditForm(g.user.nickname) 
    if form.validate_on_submit(): 
      g.user.nickname = form.nickname.data 
      g.user.about_me = form.about_me.data 
      db.session.add(g.user) 
      db.session.commit() 
      flash('Your changes have been saved.') 
      return redirect_url(url_for('edit')) 
    elif request.method !="POST": 
      form.nickname = g.user.nickname 
      form.about_me = g.user.about_me 
    else: 
      form.nickname.data = g.user.nickname 
      form.about_me.data = g.user.about_me 
    flash(form.nickname) 
    flash("inside edit") 
    return render_template('edit.html', form=form) 


<form action="" method="post" name="edit"> 
{{form.hidden_tag()}} 
<table> 
    <tr> 
     <td>Your nickname:</td> 
     <td> 
      {{form.nickname(size = 24)}} 
      {% for error in form.errors.nickname %} 
      <br><span style="color: red;">[{{error}}]</span> 
      {% endfor %} 
     </td> 
    </tr> 
    <tr> 
     <td>About yourself:</td> 
     <td>{{form.about_me(cols = 32, rows = 4)}}</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td><input type="submit" value="Save Changes"></td> 
    </tr> 
</table> 
</form> 

私はビュー内にフラッシュステーションを置き、正しい値を返します。 (size=60)を削除してform.nicknameを印刷すると、正しく印刷されます。問題ありません。エラーは、サイズ= 60のときにスローされます。なぜエラーが起こっているのか教えてください。より多くを知ることに興味がある人のため

、私はnicknameは、関数が、文字列ではありませんので、それはあなたにそのエラーを与えているこのチュートリアル、here

答えて

5

あなたは

elif request.method !="POST": 
    form.nickname = g.user.nickname 
    form.about_me = g.user.about_me 

Unicode文字列にあなたの属性Fieldクラスを回っている

elif request.method !="POST": 
    form.nickname.data = g.user.nickname 
    form.about_me.data = g.user.about_me 
する必要があります
0

を次しています。チュートリアルにはいくつかの誤りがあるとしか推測できません。

代わりにこれを試してみてください:

{{ form.nickname|truncate(60) }} 
関連する問題