私はdjangoとpythonを初めて使用します。このクエストではいくつかのガイダンスが必要です。
ケース:ユーザーがフォームの送信ボタンを押すと、成功ページと結果をダウンロードできるリンクが表示されます。結果はExcelファイルにあります。xlwtモジュールを使用してExcelファイルへの出力を作成し、成功ページを個別に表示できますが、両方を同時に表示することはできません。
私が持っているもの:私はPython2.6を搭載したWindowsXPでdjango1.1.1を実行しています。同様の質問がありましたが、それを機能させることができませんでした。
私の成功page.htmlにはこの行があります
<a href="../static/example.xls">Download CSV File</a>
urls.py:
url(r'^static/(?P<path>.*)$', send_file),
views.py:
def send_file(request):
import os, tempfile, zipfile
from django.core.servers.basehttp import FileWrapper
"""
Send a file through Django without loading the whole file into
memory at once. The FileWrapper will turn the file object into an
iterator for chunks of 8KB.
"""
filename = "C:/example.xls" # Select your file here.
wrapper = FileWrapper(file(filename),"rb")
response = HttpResponse(wrapper, content_type='text/plain')
#response['Content-Length'] = os.path.getsize(filename)
return response
リンクをクリックすると、パスエラーが発生します
send_file() got an unexpected keyword argument 'path'
Request Method: GET
Request URL: localhost:8000/webinput/static/example.xls
Exception Type: TypeError
Exception Value:
send_file() got an unexpected keyword argument 'path'
ところでexample.xlsはC:/example.xlsの場所と静的フォルダーの両方にあります
構造:
- webdb
- 静的
- example.xls
- Webinput
- urls.py
- views.py
- models.py
- 静的
これらの2つのモジュールもあります。backup_to_csvを使用すると正常に機能しますが、リンクなしで直接ダウンロードされます。私がすでにファイルを持っているときに同じことをする方法。ファイルを保存する必要がない他の方法がある場合は、それも問題ありません。
def xls_to_response(xls、fname):
response = HttpResponse(mimetype="application/ms-excel")
response['Content-Disposition'] = 'attachment; filename=%s' % fname
xls.save(response)
return response
def backup_to_csv(request、row):
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename="backup.csv"'
writer = csv.writer(response, dialect='excel')
#code for writing csv file go here...
for i in row:
writer.writerow(i)
return response