multiple form in 1 page using tab

43 views
Skip to first unread message

黄祥

unread,
Aug 11, 2017, 9:54:45 PM8/11/17
to web2py-users
is it possible to have multiple form in 1 page using tab? z
tried it before but no luck (no error occured but the result is not expected) the result that should open the new browser tab didnt open, after submit it just return flash 'success'
e.g.
controllers/default.py
def report():
query = (db.table_0.id > 0)

redirect_url_0 = 'report_detail'
formname_0 = 'formname_0'

form_0 = SQLFORM.factory(
Field("from_date", "date", 
 requires = IS_DATE() ),
Field("to_date", "date", 
 requires = IS_DATE() ), 
Field("table_0", "list:reference table_0", 
 requires = IS_EMPTY_OR(IS_IN_DB(db(query), db.table_0.id
   db.table_0._format, multiple = True) ) )
)
if form_0.process(formname = formname_0).accepted:
response.new_window = URL(redirect_url_0, vars = form_0.vars)
#redirect(URL(redirect_url, vars = form.vars) )
elif form_0.errors:
response.flash = T('Form has errors')

redirect_url_1 = 'report_summary'
formname_1 = 'formname_1'

form_1 = SQLFORM.factory(
Field("from_date", "date", 
 requires = IS_DATE() ),
Field("to_date", "date", 
 requires = IS_DATE() ), 
Field("table_0", "list:reference table_0", 
 requires = IS_EMPTY_OR(IS_IN_DB(db(query), db.table_0.id
   db.table_0._format, multiple = True) ) )
)
if form_1.process(formname = formname_1).accepted:
response.new_window = URL(redirect_url_1, vars = form_1.vars)
#redirect(URL(redirect_url, vars = form.vars) )
elif form_1.errors:
response.flash = T('Form has errors')

return dict(form_0 = form_0, form_1 = form_1)

views/default/report.html
{{extend 'layout.html'}}

<ul class="nav nav-tabs">
  <li class="active">
  <a data-toggle="tab" href="#tab-1">Detail</a>
  </li>
  <li>
  <a data-toggle="tab" href="#tab-2">Summary</a>
  </li>
</ul>

<div class="tab-content">
  <div id="tab-1" class="tab-pane fade in active">
    {{=BR() }}
    {{=form_0}}
  </div>

  <div id="tab-2" class="tab-pane fade">
    {{=BR() }}
    {{=form_1}}
  </div>
</div>

thanks and best regards,
stifan

Paolo Caruccio

unread,
Aug 12, 2017, 7:00:47 PM8/12/17
to web2py-users
Maybe the issue is due to class 'active' in the view.
To be honest, I did not fully understand your question but the following code - for example - should show the tab with the submitted form.

controllers/default.py
def report():
    query = (db.table_0.id > 0)

    #redirect_url_0 = 'report_detail'
    formname_0 = 'formname_0'

    form_0 = SQLFORM.factory(
        Field("from_date", "date", 
              requires = IS_DATE() ),
        Field("to_date", "date", 
              requires = IS_DATE() ), 
        Field("table_0", "list:reference table_0", 
              requires = IS_EMPTY_OR(IS_IN_DB(db(query), db.table_0.id
                                              db.table_0._format, multiple = True) ) )
        )
    if form_0.process(formname = formname_0).accepted:
        #response.new_window = URL(redirect_url_0, vars = form_0.vars)
        redirect_url_0 = URL('report', vars = dict(tab_active="tab-1"))
        redirect(redirect_url_0)
    elif form_0.errors:
        response.flash = T('Form has errors')

    #redirect_url_1 = 'report_summary'
    formname_1 = 'formname_1'

    form_1 = SQLFORM.factory(
        Field("from_date", "date", 
              requires = IS_DATE() ),
        Field("to_date", "date", 
              requires = IS_DATE() ), 
        Field("table_0", "list:reference table_0", 
              requires = IS_EMPTY_OR(IS_IN_DB(db(query), db.table_0.id
                                              db.table_0._format, multiple = True) ) )
        )
    if form_1.process(formname = formname_1).accepted:
        #response.new_window = URL(redirect_url_1, vars = form_1.vars)
        redirect_url_1 = URL('report', vars = dict(tab_active="tab-2"))
        redirect(redirect_url_1)
    elif form_1.errors:
        response.flash = T('Form has errors')

    return dict(form_0 = form_0, form_1 = form_1)

views/default/report.html
{{extend 'layout.html'}}

<ul class="nav nav-tabs">
  <li class={{="active" if request.vars['tab_active']!= 'tab-2' else ""}}>
  <a data-toggle="tab" href="#tab-1">Detail</a>
  </li>
  <li class={{="active" if request.vars['tab_active'] == 'tab-2' else ""}}>
  <a data-toggle="tab" href="#tab-2">Summary</a>
  </li>
</ul>

<div class="tab-content">
  <div id="tab-1" class="tab-pane fade in {{="active" if request.vars['tab_active'] != 'tab-2' else ""}}">
    {{=BR() }}
    {{=form_0}}
  </div>

  <div id="tab-2" class="tab-pane fade in {{="active" if request.vars['tab_active'] == 'tab-2' else ""}}">
    {{=BR() }}
    {{=form_1}}
  </div>
</div>

黄祥

unread,
Aug 12, 2017, 10:30:54 PM8/12/17
to web2py-users
thanks for the hints paolo, test the active tab logic but the result is same without condition (after submit the active tab is back to it's own class)
my code above is not working as expected due to javascript i forgot to put in the views side
e.g.
{{if response.new_window:}}
   <script>
    jQuery(document).ready(function() {
        window.open('{{=response.new_window}}'); 
    });
    </script>
{{pass}}
Reply all
Reply to author
Forward
0 new messages