我修改了https://groups.google.com/forum/#!msg/web2py/HQU5kD0tGag/LGtjlikzWdsJ 下载csv文件而不必先将其保存到磁盘:
在“视图”中,有一个“下载”按钮,以便在单击时,视图不会更改,但会下载文件:
{{=A(T('Download'), _type='button', _onclick=\
"jQuery('#PLID').val('%s');ajax('%s',['arg1','arg2'],':eval');
"%( request.vars.my_form_variable),URL('dlCSV') ), _class='btn btn-primary') }}
在控制器中:
def dlCSV():
:
:
:
rows=db(query).select(selected_fields)
doc64=embed64(data=str(rows),extension='application/csv')
response.headers['Content-Type'] = 'text/csv'
attachment = 'attachment;filename=data.csv'
response.headers['Content-Disposition'] = attachment
return 'window.location="%s";' % doc64
这很有效。只有一个问题:当我点击“下载”按钮时,文件名是“未知”。如何将文件名更改为“exported.csv”或其他内容?
答案 0 :(得分:1)
我从未使用/尝试过您在共享的链接中提供的解决方案。但我使用类似于以下的控制器,以csv格式下载db表的内容。
def export_to_csv():
import gluon.contenttype
response.headers['Content-Type'] = gluon.contenttype.contenttype('.csv')
response.headers['Content-disposition'] = 'attachment; filename=data.csv'
query = (db.dummy_table.id > 0)
return str(db(query).select())
我为csv()
引用了controller/appadmin.py
函数。
我不认为,你需要ajax下载文件。普通链接将起作用,它不会更改视图或页面刷新。
{{=A(T('Download'), _type='button', _href=URL('default', 'export_to_csv'))}}