Создать несколько форм на одной странице

Я пытаюсь понять, как создать много форм, похожих на одной странице. Идея состоит в том, чтобы люди комментировали различные разделы страницы с текстом. Это означает, что у каждого раздела есть свои комментарии. Формы совпадают с полем для комментариев и кнопкой отправки. Это код, который я получил до сих пор. Однако это не работает, и мне определенно нужно понять, как этого можно достичь простым способом. Может кто-нибудь помочь мне понять это.

В модели:

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 ответ

Прежде всего, это полезный справочник: несколько форм на странице (документация web2py)

Кроме того, в вашей функции вы выполняете итерацию двух элементов разных типов. Вы пытаетесь обработать каждый из этих объектов (один из которых предположительно будет целым числом, а другой - формой) как некоторый объект, который индексируется строковым ключом (например, 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
Другие вопросы по тегам