3

私のdjango Webアプリはdocxを作成して保存します。ダウンロード可能にする必要があります。以下のようにシンプルに使用render_to_responseします。

return render_to_response("test.docx", mimetype='application/vnd.ms-word')

ただし、次のようなエラーが発生します'utf8' codec can't decode byte 0xeb in position 15: invalid continuation byte

このファイルを静的として提供できなかったので、これとして提供する方法を見つける必要があります。助けてくれて本当にありがとう。

4

5 に答える 5

14

うん、wardk が述べたように、https://python-docx.readthedocs.org/を使用すると、よりクリーンなオプションになります。

from docx import Document
from django.http import HttpResponse

def download_docx(request):
    document = Document()
    document.add_heading('Document Title', 0)

    response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
    response['Content-Disposition'] = 'attachment; filename=download.docx'
    document.save(response)

    return response
于 2015-08-09T13:03:38.767 に答える
1

「test.docx」へのパスにASCII以外の文字が含まれている可能性はありますか? django デバッグ ページですべてのローカル変数を確認しましたか?

xml ファイルをダウンロードするために私がしたことは、ディスク上にファイルを作成するのではなく、メモリ ファイルを使用することでした (ファイル システム、パスなどを扱う必要がなくなります)。

    memory_file = StringIO.StringIO()
    memory_file.writelines(out) #out is an XMLSerializer object in m case

    response = HttpResponse(memory_file.getvalue(), content_type='application/xml')
    response['Content-Disposition'] = 'attachment; filename="my_file.xml"'
    response['Content-Length'] = memory_file.tell()
    return response

たぶん、これを docx-situation に適応させることができます。

于 2013-10-16T19:41:49.960 に答える
1

この応答を試してください:

response = HttpResponse(mydata, mimetype='application/vnd.ms-word')
response['Content-Disposition'] = 'attachment; filename=example.doc'
return response 
于 2013-10-16T10:15:06.623 に答える