所有web.py表格示例均采用以下格式(来自webpy.org):
myform = form.Form(
form.Textbox("boe"),
form.Textbox("bax",
form.notnull,
form.regexp('\d+', 'Must be a digit'),
form.Validator('Must be more than 5', lambda x:int(x)>5)),
form.Textarea('moe'),
form.Checkbox('curly'),
form.Dropdown('french', ['mustard', 'fries', 'wine']))
class index:
def GET(self):
form = myform()
# make sure you create a copy of the form by calling it (line above)
# Otherwise changes will appear globally
return render.formtest(form)
def POST(self):
form = myform()
if not form.validates():
return render.formtest(form)
else:
# form.d.boe and form['boe'].value are equivalent ways of
# extracting the validated arguments from the form.
return "Grrreat success! boe: %s, bax: %s" % (form.d.boe, form['bax'].value)
我不想在声明表单时填充下拉框(上面示例中的form.Dropdown)静态,但是在GET / POST方法中使用在调用页面时从数据库表中检索的条目。
我已搜索了几个小时但无法在任何地方找到提示(google,webpy.org,google groups)
答案 0 :(得分:4)
您可以通过将空列表传递给form.Dropdown
args来声明表单,然后在代码中设置args
。
# form declaration
MyForm = form.Form(form.Dropdown("french", []))
# then in your controller
my_form = MyForm()
my_form.french.args = ['mustard', 'fries', 'wine']
另请注意,请不要将form
用于变量,因为名称会与web.form
发生冲突。
答案 1 :(得分:3)
我知道这是在不久前发布的,但我之后通过设置值来完成此操作,如:
form = input_form()
form.get('some_input').value = _id
return render.some_template(form)
如果您愿意,也可以使用内置验证。我最终在电路板上找到了这样的例子,所以它可能是一种明智的隐藏文档。
答案 2 :(得分:2)
我建议你创建其他元素和表单,然后在GET / POST中创建你想要的下拉元素:
# Create copy of the form
form = myform()
# Append the dropdown to the form elements.
form.inputs = tuple(list(form.inputs) + [mydropdown])