2014-02-23 29 views
1

瓶+ wtforms瓶+ wtforms nameerror

您好,我有一些問題與傳輸數據到表單

def edit_comment(n): 
    idlist = str(n) 
    if (r.exists('entries:%s' %idlist) != True): 
     return abort(404) 
    if 'user_id' not in session: 
     return abort(401)  
    if (g.user['group_access'] == '1'): 
     return abort(403) 
    form = EditForm(idlist) 
    return render_template('edit_comment.html',idlist = idlist, r = r, form = form) 

...

class EditForm(Form): 
    edit_title = TextField("Title",validators = [Required()] ,default =r.hget('entries:%s' %idlist, 'title')) 
    edit_text = TextAreaField("Text",validators = [Required()],default =r.hget('entries:%s' %idlist, 'text')) 

...

Traceback (most recent call last): 
    File "run.py", line 129, in <module> 
    class EditForm(Form): 
    File "run.py", line 130, in EditForm 
    edit_title = TextField("Title",validators = [Required()] ,default =r.hget('entries:%s' %idlist, 'title')) 
NameError: name 'idlist' is not defined 

這裏有明確的問題w ith數據傳輸。試圖通過構造函數,但到目前爲止沒有結果

+0

'foo!= True'? EW。請按照PEP8中的建議使用'not foo'。 – ThiefMaster

回答

0

您需要在EditForm實例上設置默認值。現在它'在進口時設置 - 顯然不是你想要的,即使變量已被定義。事實上,你甚至不需要爲它的default場 - 剛剛成立它直接:

form = EditForm() 
form.edit_title.data = r.hget('entries:%s' % idlist, 'title') 
form.edit_text.data = r.hget('entries:%s' % idlist, 'text') 
return render_template('edit_comment.html', idlist=idlist, r=r, form=form) 

注:通常這是一個好主意,有您的視圖功能有類似這樣的結構:

form = EditForm() 
if form.validate_on_submit(): 
    # do whatever should be done on submit, then redirect somewhere 
    return redirect(...) 
elif request.method == 'GET': 
    # Populate the form with initial values 
    form.edit_title.data = ... 
    form.edit_text.data = ... 
return render_template(..., form=form) 

無論輸入的用戶的情況下被保留這樣的驗證失敗,但如果他打開表單的第一次它與任何默認的數據填充(從您的分貝例如,當前值)你想要的。

+0

非常感謝。你幫了我很多 – user3319163

相關問題