Forget one thing : def export_csv(): rows = db((db.tab1.id == *request.get_vars['tab1_id']*)).select() return dict(rows=rows)
On Thu, Mar 15, 2012 at 6:16 PM, Richard Vézina <ml.richard.vez...@gmail.com > wrote: > I get it to work like this : > > > def export_csv(): > rows = db((db.tab1.id == tab1_id)).select() > return dict(rows=rows) > > def export_default_analysis_request(): > tab1_subset = (db.tab1.bool1 == True) > form = SQLFORM.factory( > Field('tab1_id', requires=IS_IN_DB(db(tab1_subset),'tab1.id > ','%(f1)s')), > submit_button=T('Submit')) > if form.accepts(request.vars, session): > response.flash = T('form accepted') > * redirect(URL(a=request.application, c='C', f='export_csv.csv', > vars=dict(tab1_id=form.vars.tab1_id)))* > elif form.errors: > response.flash = T('form has errors') > else: > response.flash = T('please fill out the form') > return dict(form=form) > > And I put this in /views/C/export_csv.csv as explain in the book : > > {{ > import cStringIO > stream=cStringIO.StringIO() > rows.export_to_csv_file(stream) > response.headers['Content-Type']='application/vnd.ms-excel' > response.write(stream.getvalue(), escape=False) > }} > > And it works fine, the only thing is that I get a blank page... I could > probably set a ajax call instead of redirect later. > > Richard > > > On Wed, Mar 14, 2012 at 8:18 PM, Richard Vézina < > ml.richard.vez...@gmail.com> wrote: > >> Ho yeah, I forget about that option... >> >> Thanks Alan >> >> Richard >> >> >> On Wed, Mar 14, 2012 at 6:53 PM, Alan Etkin <spame...@gmail.com> wrote: >> >>> I have not experience with the book csv output example, but it looks >>> different than your implementation: >>> >>> -It has a special view "..../name.csv" to render the function output >>> -The Content-Type parameter is "application-vnd.ms-excel" >>> >>> I think you could change the response view parameter on form >>> validation to .../name.csv, have the function to return a dict object >>> and use the book example view to return the csv file response. >>> >>> The example I am refering to is in section 10.1.6 >>> >>> On 14 mar, 18:19, Richard <ml.richard.vez...@gmail.com> wrote: >>> > Hello, >>> > >>> > I strungle with export of csv... I have this function that works great >>> : >>> > >>> > def export_csv(tab1_id): >>> > import gluon.contenttype >>> > response.headers['Content-Type'] = \ >>> > gluon.contenttype.contenttype('.csv') >>> > import cStringIO >>> > stream=cStringIO.StringIO() >>> > db((db.tab1.id == tab1_id)).select().export_to_csv_file(stream) >>> > response.headers['Content-disposition'] = 'attachment; >>> filename=%s.csv' >>> > % 'test12345' >>> > response.write(stream.getvalue()) >>> > >>> > def export_default_analysis_request(): >>> > tab1_subset = (db.tab1.bool1 == True) >>> > form = SQLFORM.factory( >>> > Field('tab1_id', >>> > requires=IS_IN_DB(db(tab1_subset),'tab1.id','%(f1)s')), >>> > submit_button=T('Submit')) >>> > if form.accepts(request.vars, session): >>> > response.flash = T('form accepted') >>> > export_csv(tab1_id = form.vars.tab1_id) >>> > elif form.errors: >>> > response.flash = T('form has errors') >>> > else: >>> > response.flash = T('please fill out the form') >>> > return dict(form=form) >>> > >>> > The problem is that I am getting the html page below the value I want >>> to >>> > export... >>> > >>> > Do I need to redirect on a blank page? It likes if response contain the >>> > actual page that get out at the same time as the data... >>> > >>> > I just copy stuff from here and there, but I think I will have to >>> better >>> > understand what is going on... >>> > >>> > Thanks >>> > >>> > Richard >>> >> >> >