我不是程序员,所以请温柔地对待我.我使用WTForms,非常成功,但我有隐藏字段没有返回值的问题,而文档说他们应该.我构建了一个简单的例子,希望这是明确的;
forms.py:
from wtforms import (Form, TextField, HiddenField)
class TestForm(Form):
fld1 = HiddenField("Field 1")
fld2 = TextField("Field 2")
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
(render_field只是将标签,字段和错误放在td标签中)
experiment.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)
Run Code Online (Sandbox Code Playgroud)
mydata返回具有2个字段fld1和fld2的表中的唯一行.fld1是整数自动增量字段.表单中填充了该数据,因此,如果我运行experiment.py,当我提交表单时,我得到:
{'fld2':u'blah blah blah','fld1':u'1'}
但是,如果我将fld1更改为HiddenField,当我点击提交时,我会得到:{'fld2':u'blah blah blah','fld1':u''}
我究竟做错了什么?谢谢你的期待.
Rac*_*ers 13
我怀疑你的隐藏字段是(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()
Run Code Online (Sandbox Code Playgroud)
和
<html>
<body>
<table>
<form method=post action="/exp">
{% for field in form %}
{{field}}
{% endfor %}
<input type=submit value="Post">
</form>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这给了我{'fld2':u'bar','fld1':u'foo'}正如我所料.
检查mydata是否有属性"fld1"并且它有一个值.我可能会明确地将它设置为form = TestForm(request.values,obj = mydata) - 它看起来并不像WTForms会关心的那样,但是我有时因为它非常挑剔而被烧毁.
如果这对您不起作用,请返回并发布您的HTML以及mydata具有的值.
| 归档时间: |
|
| 查看次数: |
30962 次 |
| 最近记录: |