2016-08-24 6 views
1

希望する結果は、データベース内のすべてのユーザーのスプレッドシートをエクスポートして一度にエクスポートするのではなく、ユーザーを3つのグループに分割し、スプレッドシート。Excelスプレッドシートである複数のHttpResponseオブジェクトを返す

私は、コードは(ユーザーの最初のチャンク別名)3のうちの最初のHttpResponseオブジェクトを返すこれまでxlsxwriterとStringIOを

を使用しています。私はStreamingHttpResponseを使ってみましたが、間違っていると信じています/この作業には適切ではありませんでした。

質問/ s:1つの応答で複数のスプレッドシートを返すことはできますか?そうでなければ、この関数を複数の時間、各ユーザーグループに対して一度呼び出すのが最善の方法でしょうか? (最初のコメントの後編集された

ありがとう!以下

コード:

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 
+0

ビューから1つの応答を返すことができます。複数の応答が必要な場合は、ブラウザから複数の要求も行う必要があります。 – knbk

+1

それはできません。あなたの周りの仕事として、静的フォルダにファイルを保存し、すべてのファイルのパスを返すことができます。応答を受け取ると、クライアントはすべてのファイルを開く(またはダウンロードする)可能性があります –

+0

@MoinuddinQuadri - 有望ですね!静的フォルダにファイルを保存することに慣れていない場合:質問の答えとして可能性がありますか? – Dan

答えて

1

あなたは、単一のAPI呼び出しで複数のHttpResponseオブジェクトを返すことができません。しかし、回避策として、次のことができます。

  • アプローチ1:コンテンツは常にダイナミックになるだろうと、ファイルの参照が将来的に必要とされていない場合は、次の各HttpResponse

  • を返す メイク複数のリクエスト

    アプローチ2:コンテンツが静的になり、今後同じファイルが必要な場合:1回のリクエストで、ファイルをaws s3、にアップロードしてくださいまたはご使用のサーバーにインストールしてください。レスポンスで各ファイルのパスを返し、クライアント側でそれらのファイルをダウンロードします。

2

あなたは複数のHttpResponseオブジェクトを返すことはできませんが、あなたは1つのZIPファイルにそれらを組み合わせる場合は、1のHttpResponseで複数のファイルを返すことができます。

How to return multiple files in HttpResponse Django

関連する問題