2012-11-29 239 views
10

我不是程序員,所以請對我溫柔。我正在使用WTForms,非常成功,但是我隱藏的字段沒有返回值,而文檔卻說他們應該這樣做。我已經構建了一個簡單的例子,希望這是明確的;wtforms隱藏字段值

forms.py:

from wtforms import (Form, TextField, HiddenField) 

class TestForm(Form): 
    fld1 = HiddenField("Field 1") 
    fld2 = TextField("Field 2") 

experiment.html:

{% from "_formshelper.html" import render_field %} 
<html> 
    <body> 
     <table> 
     <form method=post action="/exp"> 
      {% for field in form %} 
       {{ render_field(field) }} 
      {% endfor %} 
      <input type=submit value="Post"> 
     </form> 
     </table>   
    </body> 
</html> 

(render_field只是把在TD標籤的標籤,現場和錯誤)

實驗.py:

from flask import Flask, request, render_template 

from templates.forms import * 
from introspection import * 

app = Flask(\__name__)     
app.config.from_object(\__name__) 
db_session = loadSession() 

@app.route('/exp', methods=['POST', 'GET']) 
def terms(): 
    mydata = db_session.query(Peter).one() 
    form = TestForm(request.form, mydata) 
    if request.method == 'POST' and form.validate(): 
     return str(form.data) 
    return render_template('experiment.html', form = form) 

if __name__ == '__main__': 
    app.run(debug = True) 

mydata返回表中唯一具有2個字段fld1和fld2的行。 fld1是一個整數自動增量字段。表單中填充了這些數據,所以如果我運行experiment.py,當我提交表單時,我會得到:

{'fld2':u'blah blah blah','fld1':u'1'}

但是,如果我改變FLD1到HiddenField,當我點擊提交,我得到: { 'FLD2':u'blah等等等等」, 'FLD1':U ''}

我在做什麼錯?感謝預期。

+0

剛纔瞭解到,顯然我們甚至不需要向模板顯式添加隱藏字段,它們會通過flask-wtf正好在「form」標籤下添加。 – jxramos

回答

10

我懷疑你的隱藏字段是(1)沒有得到一個值集,或者(2)render_field宏沒有正確地構建它。如果我必須打賭,我會說你的「mydata」對象沒有你期望的值。

我把你的代碼剝離到最低限度,這對我很有用。請注意,我明確地給出一個值,這兩個領域:

from flask import Flask, render_template, request 
from wtforms import Form, TextField, HiddenField 

app = Flask(__name__) 

class TestForm(Form): 
    fld1 = HiddenField("Field 1") 
    fld2 = TextField("Field 2") 


@app.route('/', methods=["POST", "GET"]) 
def index(): 
    form = TestForm(request.values, fld1="foo", fld2="bar") 
    if request.method == 'POST' and form.validate(): 
    return str(form.data) 

    return render_template('experiment.html', form = form) 

if __name__ == '__main__': 
    app.run() 

<html> 
<body> 
<table> 
    <form method=post action="/exp"> 
     {% for field in form %} 
      {{field}} 
     {% endfor %} 
     <input type=submit value="Post"> 
    </form> 
</table> 
</body> 
</html> 

這給了我{ 'FLD2':u'bar ' 'FLD1':u'foo'}我會期待。

檢查mydata是否有屬性「fld1」並且它有一個值。我可能會明確地將它設置爲form = TestForm(request.values,obj = mydata) - 它看起來並不像WTForms那樣在意,但我有時被它怪異地挑剔所灼傷。

如果這不適用於您,請返回併發布您的HTML以及mydata具有的值。

+3

嗨,雷切爾。感謝您的回答,並且非常及時。這是宏觀失去價值。現在都好。 – SkinnyPete63

+0

太棒了,我很高興。 –