2017-07-06 3 views
2

私はボタンの輸出がありますPython(Jinja2)でファイルをダウンロードするには、[エクスポート]ボタンをクリックしますか?

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

を、私は/エクスポート/

にindex.cgi

#! /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 %} 

結果をタブで区切られたファイルにダウンロードしようとしていますので、私はwritiローカルファイルに保存してからファイルをダウンロード(ダウンロード)しますが、ダウンロード部分をどうやって行うのか分かりません。フラスコやdjangoには良いlibsがあります。ユーザーのデスクトップ上にタブで区切られたファイルに結果が表示されますか?

export.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') 

答えて

3

あなたはタブ区切りファイルを生成するために昔ながらの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 2行は、 コンテンツから分離する空白行に続く、 が続いていますプレーンテキストの内容で

あなたは、これがエクスポートボタン、 のクリック時に起こるようにしたい場合は、することができます、例えば:

  • エクスポートボタンを使用する別のURLエンドポイントへのリンクを作ります
  • また、同じスクリプトを使用して、フォームパラメータの条件文を使用して、先頭のページを印刷するか、上のサンプルスクリプトを使用してコンテンツを印刷します。

さらなるヘルプが必要な場合はお知らせください。

+0

私はurの例に従っていますが、エクスポートをクリックすると別のURLにリダイレクトされ、Content-Type:text/plain Content-Disposition:attachment;と表示されます。 filename = testing.txtブラウザのATTTGTA ATTTGTA ATTTGTA ATTTGTA – user3407267

+0

何か間違っていますか? – user3407267

+0

私はresults = [["ATTTGTA"]、["ATTTGTA"、 "ATTTGTA"、 "ATTTGTA"]]を使ってそれが動作するかどうかを調べました。それは、タブで区切られた値で新しい行に各リストをダウンロードすることになっているので、最初の行のATTTGTAと2行目のATTTGTA ATTTGTA ATTTGTAはファイルに保存する必要があります(saveまたは何かのように) – user3407267

関連する問題