5

我查看了与我的类似的各种问题,但我找不到任何可以解决我的问题的方法。

在我的代码中,我想提供一个新生成的 excel 文件,该文件位于我的 app 目录中名为 files 的文件夹中

excelFile = ExcelCreator.ExcelCreator("test")
excelFile.create()
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="test.xls"'
return response

因此,当我单击运行这部分代码的按钮时,它会向用户发送一个空文件。通过查看我的代码,我可以理解这种行为,因为我在回复中没有指向该文件......

我看到有些人使用文件包装器(我不太了解它的用途)。所以我确实这样做了:

response = HttpResponse(FileWrapper(excelFile.file),content_type='application/vnd.ms-excel')

但是,我从服务器收到错误消息:发生服务器错误。请联系管理员。

感谢您在我的 Django 任务中帮助我,您的宝贵建议让我变得更好!

4

2 回答 2

7

首先,你需要了解它是如何工作的,你得到一个空文件,因为这就是你正在做的,实际上:

response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="test.xls"'

HttpResponse 作为第一个 arg 接收响应的内容,看看它的构造函数:

def __init__(self, content='', mimetype=None, status=None, content_type=None):

因此,您需要使用您希望的内容创建响应,在这种情况下,使用 .xls 文件的内容。

您可以使用任何方法来做到这一点,只要确保内容在那里。

这是一个示例:

import StringIO
output = StringIO.StringIO()
# read your content and put it in output var
out_content = output.getvalue()
output.close()
response = HttpResponse(out_content, mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="test.xls"'
于 2012-12-29T03:55:05.097 回答
0

我建议您使用:

python manage.py runserver

从命令行运行您的应用程序。从这里您将看到应用程序的控制台输出以及运行时引发的任何异常。这可以快速解决您的问题。

于 2012-12-27T20:50:48.393 回答