I do want to also display content in the DIV. In addition to displaying content in the DIV, I want the controller to also trigger a file download. A more accurate version of the form_query() controller would be something like:
In reponse to the form submission, it has to return a dict containing a table (Result) that will be loaded to the target DIV as well as trigger a file download. The file is just a static file for now, but eventually it will be a csv export of the query result (rows). This way i display the result as a table and also have the user download the result set as a csv. def form_query(): if request.args(0) in db.tables: response.generic_patterns = ['load'] form=SQLFORM(db[request.args(0)]) if form.validate(keepvalues=True): rows = db().select(db.vmt_weekly.ALL) Result=SQLTABLE(rows,headers='fieldname:capitalize',truncate=60) response.headers['Content-Type'] = gluon.contenttype.contenttype('.txt') response.headers['Content-Disposition'] = 'attachment; filename=somefile.txt' #NOTE#It has to return: dict(Result=SQLTABLE(rows,headers='fieldname:capitalize',truncate=60),Query=form) And also trigger the download of somefile.txt. And further somefile.txt will be a csv representation of 'rows' variable above. return dict(form=form) else: return dict() Thanks, mave On Thursday, September 6, 2012 1:20:04 PM UTC-7, Anthony wrote: > > My response from Stack Overflow: > > jQuery('#rep_type').change(function(){ > window.open('{{=URL('reports', 'form_query')}}' + '/' + jQuery(this).val()); > }); > > If you want the file to download as an attachment, don't use a component. > A component creates a div for displaying content, but you just want to > trigger a file download. > > Anthony > > > On Thursday, September 6, 2012 12:48:56 PM UTC-4, maverick wrote: >> >> Hello! >> I want to stream a file as an attachment in the response. I have this >> function: >> def form_query(): >> response.flash = str(request.args(0)) >> response.generic_patterns = ['load'] >> response.headers['Content-Type'] = >> gluon.contenttype.contenttype('.txt') >> response.headers['Content-Disposition'] = 'attachment; >> filename=somefile.txt' >> #more code goes in here to process request.args here. Ultimately, >> the controller is expected to return a dict containing a table and the file >> to be streamed as an attachment. For now just trying to get the file >> streamed. >> return response.stream(open('somefile.txt'),chunk_size=1024) >> >> When I call this controller normally (if I put the streaming code inside >> index() for e.g.) it responds by opening up a download popup to save the >> file to disk. But when I have this called as a target function from >> web2py_component in index.html (to fill a div with the response)like this: >> >> web2py_component("{{=URL('reports', 'form_query.load')}}" + "/" + >> jQuery(this).val(), target='div_form_query'); >> >> It renders the file inside the DIV 'div_form_query' rather than popup a >> download window. >> >> Any ideas how to render the file as an attachment while using >> web2py_component. I'm using web2py_component as I want to conditionally >> load input forms into that div target (div_form_query) based on a select >> list which has tables as options. The index.html looks something like: >> >> {{left_sidebar_enabled,right_sidebar_enabled=True,False}} >> {{extend 'layout.html'}} >> <h5>{{=message}}</h5> >> {{=SELECT('Select a report', >> *[OPTION(repts[i].descr, _value=str(repts[i].report)) for i in >> range(len(repts))], _id="rep_type")}} >> <div id="div_form_query"></div> >> >> <script> >> jQuery(document).ready(function(){ >> jQuery('#rep_type').change(function(){ >> web2py_component("{{=URL('reports', 'form_query.load')}}" + "/" + >> jQuery(this).val(), target='div_form_query'); >> }); >> }); >> </script> >> >> {{block left_sidebar}} >> {{"""=A(T("Administrative Interface"), >> _href=URL('admin','default','index'), _class='button', >> _style='margin-top: 1em;')"""}} >> <!--h6>{{=T("Don't know what to do?")}}</h6--> >> <ul> >> <li>{{=A(T("Reports"), _href=URL('netman','reports','index'))}}</li> >> <li>{{=A(T("Billing"), _href=URL('netman','billing','index'))}}</li> >> <li><a href="http://192.168.136.40/zabbix >> ">{{=T('Monitoring')}}</a></li> >> </ul> >> {{end}} >> >> Thanks, >> mave >> > --