【问题标题】:Return multiple HttpResponse objects that are Excel spreadsheets返回多个 HttpResponse 对象,它们是 Excel 电子表格
【发布时间】:2016-08-24 21:46:58
【问题描述】:

期望的结果是导出数据库中所有用户的电子表格,而不是一次全部导出 - 将用户分成 3 个组,然后将每个组导出为电子表格。

我正在使用 xlsxwriter 和 StringIO

到目前为止,代码只返回 3 个中的第一个 HttpResponse 对象(也就是第一个用户块)。我尝试使用 StreamingHttpResponse,但我认为我误用了它/它不适合这项任务。

问题:我可以在一个回复中返回多个电子表格吗?如果没有,最好的办法是多次调用这个函数,每个用户组一次? (在第一次评论后编辑

非常感谢!

代码如下:

def export_users(request):
# all users
users = User.objects.all()
# breaks up all users into 3 groups
user_groups = [users[x:x+2] for x in xrange(0, len(users), 2)]

#  FUNCTIONALITY NOTES --> idea is to split number of users for exporting into groups of 3 then export each group. right now it stops after the first group


# list var for storing all responses
full_response = []

for group in user_groups:
    response = HttpResponse(content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment; filename=UserReport.xlsx'

    # user group
    print "group! ---> %s"%(group)

    # creates data variable to write to response
    xlsx_data = WriteToExcel(group)
    response.write(xlsx_data)

    # appending each response to an array
    full_response.append(response)
    print len(full_response)

# all response objects 
print full_response

# returning one here 
return response

# non-functioning attempt to return all responses

# for response in full_response:
#     print response
#     return response

【问题讨论】:

  • 您可以从您的视图中只返回一个响应。如果需要多个响应,还需要从浏览器发出多个请求。
  • 你不能那样做。作为一种解决方法,您可以将文件保存在静态文件夹中并返回所有文件的路径。收到响应后,客户端可以打开(或下载)所有文件
  • @MoinuddinQuadri - 听起来很有希望!不熟悉将文件保存到静态文件夹:您能否详细说明问题的答案?
  • 您必须在您的django 项目中配置static 文件设置并将文件保存在静态文件夹中,然后返回该文件的路径。您将很容易在网上找到有关如何实现这一目标的各种示例

标签: python django export xlsxwriter


【解决方案1】:

您不能返回多个 HttpResponse 对象,但如果将多个文件合并到一个压缩文件中,则可以在一个 HttpResponse 中返回多个文件。

How to return multiple files in HttpResponse Django

【讨论】:

    【解决方案2】:

    不能通过单个 API 调用返回多个 HttpResponse 对象。但是,作为一种解决方法,您可以:

    • 方法 1:如果内容将始终是动态的并且将来不需要文件引用: 发出多个请求,每个返回HttpResponse

    • 方法 2:如果内容将是静态的,并且您将来可能需要相同的文件:发出单个请求,将文件上传到aws s3google cloud storage 或在您的服务器上。返回带有响应的每个文件的路径并在客户端下载这些文件。

    【讨论】:

      猜你喜欢
      • 2019-10-13
      • 2019-06-12
      • 2016-08-08
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多