【问题标题】:Downloading a CSV without first saving it to disk: change downloaded filename in web2py下载 CSV 而不先将其保存到磁盘:在 web2py 中更改下载的文件名
【发布时间】:2016-08-30 13:40:57
【问题描述】:

我修改了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”或其他名称?

【问题讨论】:

    标签: csv download web2py


    【解决方案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())
    

    为此,我从controller/appadmin.py 引用了csv() 函数。

    而且我不认为,您需要 ajax 来下载文件。正常链接会起作用,它不会改变视图或页面刷新。

    {{=A(T('Download'), _type='button', _href=URL('default', 'export_to_csv'))}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2011-05-20
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2014-02-18
      相关资源
      最近更新 更多