在同一页面上创建多个表单

时间:2015-02-23 12:13:00

标签: python web2py

我试图弄清楚如何在一个页面上创建许多相似的表单。这个想法是让人们用文本评论页面的各个部分。这意味着, 每个部分都有自己的意见。表单与注释字段和提交按钮相同。 这是我到目前为止的代码。然而,它不起作用,我肯定需要了解如何以一种简单的方式实现这一点。有人可以帮我解决这个问题。

模特:

db.define_table('manyforms',
    Field('comment'))

在控制器中:

allforms=dict(form_id=new_form_id(),form=SQLFORM(db.manyforms))
for f in allforms:
    if f['form'].accepts(request.vars,formname=f['form_id']):
        response.flash = 'accepted'
    else: 
        response.flash = 'refused'
return dict(allforms=allforms)

1 个答案:

答案 0 :(得分:0)

首先,这是一个有用的参考:Multiple forms per page (web2py documentation)

此外,在您的函数中,您正在迭代两个不同类型的项目的字典。您试图将每个对象(其中一个可能是一个整数,另一个,一个表单)视为一个由字符串键(例如dict)索引的对象。

最后,从你的帖子中不清楚你希望你的功能做什么。您的功能是否与视图相对应?如果是这样,您真的想要一组在您的视图中通过单个变量{{= allforms}}访问的表单吗?也许从工程的角度来看,更好的方法是首先创建一个生成表单列表的函数;也许是这样的:

def generate_forms():
  form_id_list = # create id list according to whatever criteria
  forms = [SQLFORM(db.manyforms, _id = _id) for _id in form_id_list]

  for form in forms: 
    if form.process(request.vars, formname = form['_id']).accepted:
        response.flash = 'accepted'
    else: 
        response.flash = 'refused'

  return forms