Dear Cristina, I make the modal in the main page and use components (LOAD()) to submit the forms. This way, each form shall have its own controller function (for instance, your_form) and view ('your_form.load'). The javascripts are inserted by the form functions (the component). I use response.js. As an example of main page: def show_entities(): response.title = 'Home' projects_list = [] nav_bar = [] project_name = '' form_ret = None form_det = None form_ent = None table_ent = None if request.args: project_id = request.args(0, cast=int) project_name = db.project(project_id).project_name nav_bar = gera_nav_bar(project_id) response.js = '$("#entity_modal").modal("show");' form_ret = LOAD('default', 'cru_ret.load', args=request.args(0), ajax=True, target='form_ret') form_det = LOAD('default', 'cru_det.load', args=request.args(0), ajax=True, target='form_det') form_ent = LOAD('default', 'cru_ent.load', args=request.args(0), ajax=True, target='form_ent') table_ent = LOAD('default', 'table_entities.load', args=request.args(0), ajax=True, target='table_ent' ) else: projects_query_results = db(db.project.id > 0).select(orderby= db.project.id) projects_list = cria_tabela_projetos(projects_query_results, 'show_entities') return dict(projects_list=projects_list, project_name=project_name, nav_bar=nav_bar, form_ret=modal_helper('ret_modal', 'Record Entity Type' , form_ret), form_det=modal_helper('det_modal', 'Data Entity Type' , form_det), form_ent=modal_helper('entity_modal', 'Entity', form_ent), table_ent=table_ent)
Here an example of component controller function: def cru_ent(): table_style = 'bootstrap4_stacked' if len(request.args) > 1: # update entity button entity_id = request.args(1, cast=int) form = SQLFORM(db.entity, db.entity(entity_id), formstyle= table_style) response.js = '$("#entity_modal").modal("show");' elif request.args: # only project information project_id = request.args(0, cast=int) db.entity.project_id.default = project_id form = SQLFORM(db.entity, formstyle=table_style) if request.vars.reload_div: response.js = '$("#entity_modal").modal("show");' else: # general call even without project form = SQLFORM(db.entity, formstyle=table_style) if form.process().accepted: response.flash = 'New Entity added!' if request.vars.reload_div: response.js = "jQuery('#%s').get(0).reload();" % request.vars.reload_div response.js += "jQuery('#table_ent').get(0).reload();" response.js += '$("#entity_modal").modal("hide");' return dict(form=form) Just for completion, below is the code of the function to create a modal (used at main controller function). I prefer using HTML helpers in controller functions because PYTHON feels more simple to work. def modal_helper(modal_id, title, body_content, footer_content=BUTTON('Close', **{'_type':"button", '_class':"btn btn-danger", '_data-dismiss':"modal"})): """ Creates a modal. !!!! attention: it needs to stay on first level, out of any other div or container, otherwise it may not appear. Requires importing: BUTTON, H4, DIV from gluon.html. Arguments: modal_id (string): id of modal in page. title (string or web2py HMTL helper): title of the modal, display in big letters on top. body_content (web2py HMTL helper): object to display in modal. For example, a form for a table. footer_content (web2py HMTL helper): object to display in modal footer. Return: a DIV object of modal class. """ close_btn = BUTTON( I(**{'_class': 'fa fa-times fa-2x'}), **{'_type':"button", '_class':"close", '_data-dismiss':"modal"}) header_title = H4(title, _class="modal-title") header = DIV(header_title, close_btn, _class="modal-header") body = DIV(body_content, _class="modal-body") footer = DIV(footer_content, _class="modal-footer") return DIV( DIV( DIV(header, body, footer, _class="modal-content"), _class="modal-dialog"), _class="modal", _id=modal_id) On the button to open the modal I include in request.vars the id of the component with the table of entities to make it reload after submitting the form. The component view is simple: just make {{=form}}. Follows the main view (show_entities.html): {{=nav_bar}} {{=form_det}} {{=form_ent}} {{=form_ret}} <div class="widget-container-col"> <div class="widget-box widget-color-grey"> {{if [] == projects_list:}} <div class="row-12"> <h2 class='display-5'>{{=project_name}}</h2> </div> <div class="row-12"> {{=table_ent}} </div> {{else:}} {{=projects_list}} {{pass}} </div> </div> Important: modal must stay at first level to appear, otherwise it will inherit the z-index of its parent. Em sexta-feira, 18 de outubro de 2019 19:01:30 UTC-3, Cristina Sig escreveu: > > Thanks for your explanation, > > I'm a newbie on web2py so I have some doubts. > Do you set your modal and script that calls that modal on the main page? > or do you call it from a different view page? > I'm a little bit confused > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/4c42ea2a-591a-4b78-b61e-1ad32d36303d%40googlegroups.com.