Python wtforms隐藏字段值

Python wtforms隐藏字段值,python,wtforms,Python,Wtforms,我使用的是WTForms,我有一个隐藏字段不返回值的问题,而文档说应该返回值。下面是一个简单的例子: forms.py: from wtforms import (Form, TextField, HiddenField) class TestForm(Form): fld1 = HiddenField("Field 1") fld2 = TextField("Field 2") {% from "_formshelper.html" import render_field

我使用的是WTForms,我有一个隐藏字段不返回值的问题,而文档说应该返回值。下面是一个简单的例子:

forms.py:

from wtforms import (Form, TextField, HiddenField)

class TestForm(Form):
    fld1 = HiddenField("Field 1")
    fld2 = TextField("Field 2")
{% 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>
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)  
experience.html:

from wtforms import (Form, TextField, HiddenField)

class TestForm(Form):
    fld1 = HiddenField("Field 1")
    fld2 = TextField("Field 2")
{% 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>
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返回表中包含两个字段fld1和fld2的唯一行。fld1是一个整数自动递增字段。表单中填充了这些数据,因此如果我运行experience.py,当我提交表单时,我会得到:

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

但如果我将fld1更改为HiddenField,当我点击submit时,我会得到: {'fld2':u'blah blah blah','fld1':u'}


我做错了什么?

我怀疑您的隐藏字段是(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()


{%形式的字段为%}
{{field}}
{%endfor%}
这给了我{'fld2':u'bar','fld1':u'foo'}我所期望的

检查mydata是否具有属性“fld1”及其值。我可能会显式地将它设置为form=TestForm(request.values,obj=mydata)——看起来WTForms不会在意,但有时我会因为它过于挑剔而感到厌烦


如果这对您不起作用,请回来发布您的HTML以及mydata的值

嗨,瑞秋。谢谢你的回答,谢谢你这么及时。正是宏丢失了值。现在一切都好了。我们刚刚了解到,显然我们甚至不需要显式地向模板添加隐藏字段,它们是由flask wtf在
表单
标记的正下方添加的。