【问题标题】:Django to serve generated excel fileDjango 提供生成的 excel 文件
【发布时间】:2012-12-21 16:23:21
【问题描述】:

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

在我的代码中,我想提供一个新生成的 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 任务中帮助我,您的宝贵建议让我越来越好!

【问题讨论】:

  • excelFile.file 是什么类型?另外,您是否尝试过使用开发runserver 和DEBUG = True 运行它?这应该会得到更有用的反馈。
  • 在 excelFile 类中,我使用 open() 打开一个文件,所以它是一个文件。就像我说的,它返回的是服务器错误,而不是常规的调试视图。
  • DEBUG = True 在你的settings.py 中吗?
  • 您能否提供更多的视图文件,而不仅仅是您所包含的内容?从您提到的响应(发生服务器错误)中,即使您说 DEBUG 设置为 True,听起来也不是,也许您可​​以提供更多错误消息?我的第一个想法是您没有在您的views.py 中从django.core.servers.basehttp 导入FileWrapper,因为这会导致您提到的错误。
  • 嗨 zzzirk,您可以在这里查看更多内容:pastebin.com/7Dn5JFiU 我是认真的,DEBUG 设置为 True,我想知道为什么在这种特殊情况下我没有得到调试视图,因为其他错误它工作得很好

标签: django excel file httpresponse serve


【解决方案1】:

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

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

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

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"'

【讨论】:

    【解决方案2】:

    我建议你使用:

    python manage.py runserver
    

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

    【讨论】:

    • 谢谢,这帮助我解决了我的问题。 文件必须保持打开状态才能使用 FileWrapper
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2020-06-05
    • 2017-12-30
    • 2016-12-10
    • 2018-09-25
    • 1970-01-01
    相关资源
    最近更新 更多