Python 如何使用Django从磁盘返回Excel作为HttpResponse

Python 如何使用Django从磁盘返回Excel作为HttpResponse,python,django,excel,Python,Django,Excel,我正在使用Django在我的网页上编写一个按钮来支持下载按钮,我已经生成了Excel(.xls)文件,它们保存在服务器上。我不需要使用csv编写器动态写入行和列,然后返回响应,但是,我只想将磁盘上的excel文件传递到响应中,然后返回响应,我在views.py中的函数如下: def price_list_download(request): today = date.today() filename = 'test_price_list-%s.xls' % today.strft

我正在使用Django在我的网页上编写一个按钮来支持下载按钮,我已经生成了Excel(.xls)文件,它们保存在服务器上。我不需要使用csv编写器动态写入行和列,然后返回响应,但是,我只想将磁盘上的excel文件传递到响应中,然后返回响应,我在views.py中的函数如下:

def price_list_download(request):
    today = date.today()
    filename = 'test_price_list-%s.xls' % today.strftime("%Y-%m-%d")

    response = HttpResponse(file("PATH_TO_EXCEL.xls"))
    response['Content-Type'] ='application/vnd.ms-excel'
    response['Content-Disposition'] = 'attachment; filename="' + filename + '"'

    return response
它可以下载,但是,当我试图打开下载的文件时,它会弹出一条横幅,上面写着:您试图打开的文件,“NAME_OF_file.xls”的格式与文件扩展名指定的格式不同。你想现在打开吗

我仔细检查了.xls文件是否应该使用application/vnd.ms-excel这种内容类型,所以我不知道哪里出了问题。 当我单击“是”并试图打开此下载的文件时,它在第0行第0列中只包含一个随机字符串(ÐÏa),文件的其余部分为空

需要帮忙吗?
谢谢

好的,问题解决了,我的一位同事帮了我: 我不需要被迫返回HttpResponse,相反,我可以在html按钮中使用
。 这样,我就不需要打开磁盘上的excel并将其读入内存,然后再次写入HttpResponse。此外,它还保存了我已经在Excel中生成的所有花哨的标题和格式


谢谢!希望这能在类似的场景中为其他人服务

你需要转换成json兼容的格式,比如csv,然后返回-,谢谢你给我指出了这个链接。但正如该链接所说,已知的限制条件是:字体、颜色和图表不受支持。但是我确实需要下载.xls文件,仍然有一个图片作为标题,所有其他标题都用粗体和前景色突出显示。另外,我注意到这个pyexcel/django excel项目只测试了1.7.8+版本的django,但是,由于各种原因,我们的django必须保持在1.5版本,所以我认为这对我的情况没有帮助。还有别的办法吗?谢谢!这是另一个可能对@dmitryro有帮助的例子,非常感谢,这个例子看起来很有希望,但它使用的是Django 1.8.2,我的是1.5,我不确定这是否会给我带来任何阻碍,但我会尝试一下,并尽快让你知道。ThanksI刚刚意识到这个示例正在动态创建/写入Excel,但我的情况是,我已经在磁盘上保存了Excel文件,我当然不想再次使用for循环和配置标题、字体、样式,我只想将服务器上的Excel放入响应中。谢谢这很有帮助,但是直接回答原来的问题会更好