5

私と同じようなさまざまな質問を調べましたが、問題の解決策は見つかりませんでした。

私のコードでは、appディレクトリのfilesという名前のフォルダーにある新しく生成されたExcelファイルを提供したいと思います。

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は、最初の引数として応答のコンテンツを受け取ります。そのコンストラクターを確認してください。

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 に答える