我是django和python的新手。需要在这个问题上获得一些指导。
场景:当用户在表单上点击提交按钮时,应该显示成功页面和一个链接,在链接上他们可以下载结果。结果是excel文件。我可以使用xlwt模块创建excel文件输出并单独显示成功页面,但无法同时实现两者。
我有以下内容: 我在Windows XP上运行django1.1.1,并使用python 2.6。以前有类似的问题被问到,但我不能使它工作。
我的success page.html文件中有这一行:
<a href="../static/example.xls">Download CSV File</a>
urls.py:
url(r'^static/(?P<path>.*)$', send_file),
视图.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
- Static
- example.xls
- Webinput
- urls.py
- views.py
- models.py
- Static
我也有这两个模块。如果我使用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