我的csv导出下载按钮坏了

时间:2014-08-20 22:38:11

标签: python-2.7 csv cherrypy export-to-csv

我正在使用cherrypy运行一个交互式网站,虽然生成CSV的python函数似乎正常工作(如果你直接与它进行交互,我的浏览器下载它),它似乎没有给用户这个CSV我将其嵌入表单请求中的文件:

<form id="export_csv_left" action="/c/flex_export_csv" method="get">
<input type="hidden" name="datakey" value="8TZbmRZ54IL7" >
<button type="button">Export stories and data as CSV</button>
</form>

我希望有一个按钮,显示“导出CSV”并返回文件。 该表单生成了对我的cherrypy的请求,如下所示:

djotjog.com/c/flex_export_csv?datakey=8TZbmRZ54IL7

cherrypy部分内的标题是......

csv = make_csv(literal_eval(raw_data), filename)
cherrypy.response.headers['Content-Type'] = "application/x-download"
cherrypy.response.headers['Content-Disposition'] = ('attachment; filename= %s' % (filename,))
return csv

在浏览器中加载该链接会生成CSV。那么表格的内容是什么呢?

以下是我不太了解的一些可能相关的javascript控制台消息:

 Denying load of chrome-extension://ganlifbpkcplnldliibcbegplfmcfigp/scripts/vendor/jquery/jquery.min.map. Resources must be listed in the web_accessible_resources manifest key in order to be loaded by pages outside the extension. 

如果相关的话。

1 个答案:

答案 0 :(得分:1)

你的问题本身与CherryPy无关。只需确保您的表单按钮 type属性为submit,而回复content-type标题为通用application/octet-stream(或text/csv)。像这样。

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import cherrypy


config = {
  'global' : {
    'server.socket_host' : '127.0.0.1',
    'server.socket_port' : 8080,
    'server.thread_pool' : 4
  }
}


class App:

  @cherrypy.expose
  def index(self):
    return '''<!DOCTYPE html>
      <html>
      <body>
        <form action="/gimmefile" method="get">
          <input type="hidden" name="key" value="8TZbmRZ54IL7"/>
          <button type="submit">Export CSV</button>
        </form>
      </body>
      </html>
    '''

  @cherrypy.expose
  def gimmefile(self, key):
    cherrypy.response.headers['Content-Type']        = 'application/octet-stream'
    cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=yourfile.csv'
    return 'Your;file;content;and;{0}'.format(key)


if __name__ == '__main__':
  cherrypy.quickstart(App(), '/', config)