代码之家  ›  专栏  ›  技术社区  ›  user3407267

如何在Python(Jinja2)中点击导出按钮下载文件?

  •  2
  • user3407267  · 技术社区  · 7 年前

    我有一个按钮导出:

     <button class="aptButton" formaction="/export/" type="submit">export</button>
    

    我在出口处有这个/

    #! /apollo/sbin/envroot $ENVROOT/bin/python
    # -*- coding: utf-8 -*-
    
        import cgitb
        cgitb.enable()
    
        import cgi
    
        def main():
            print "Content-Type: text/html"
            print
            form = cgi.FieldStorage()
    
            results = helpers.getResults()
            environment = helpers.get_environment()
    
    
            print environment.get_template('export.html').render(
                    results = results)
    
        main()
    

    我的export.html中有这个

    <!doctype html>
    {% for id in results %}
        {{ write_results_to_file(id) }}
    {% endfor %}
    

    我正试图将结果下载到一个选项卡分隔的文件中,所以我想到了写入一个本地文件,然后发送(下载)该文件,但我不知道如何进行下载部分,我不能使用flask或django,它有一些很好的lib。有没有其他lib可以用来将结果下载至用户桌面上的选项卡分隔文件?

    导出.py

    def write_results_to_file(result):
        local_filename = "/home/testing.txt"
        # NOTE the stream=True parameter
        with open(local_filename, 'w') as f:
            f.write('\t'.join(result) + '\n')
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   janos slartidan    7 年前

    如果您使用传统的CGI生成一个制表符分隔的文件, stdout

    def main():
        form = cgi.FieldStorage()
        results = helpers.getResults()
    
        print "Content-Type: text/plain"
        print "Content-Disposition: attachment; filename=testing.txt"
        print
    
        for result in results:
            print '\t'.join(result) + '\n'
    
    main()
    

    关键部分是两条线 print 标题, 然后是一个空行,与内容分开,

    出口 按钮

    • 使 出口
    • 或者,使用相同的脚本,在表单参数上使用条件语句来决定打印首页,或者使用上面的示例脚本打印内容

    如果你需要进一步帮助,请告诉我。