5👍
✅
Python-docx’s Document.save()
method accepts a stream instead of a filename. Thus, you can initialize an io.BytesIO()
object to save the document into, then dump that to the user.
Reporte = ReporteWord(Gcas, FI, FF, grafica)
bio = io.BytesIO()
Reporte.save(bio) # save to memory stream
bio.seek(0) # rewind the stream
response = HttpResponse(
bio.getvalue(), # use the stream's contents
content_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
)
response["Content-Disposition"] = 'attachment; filename = "Reporte.docx"'
response["Content-Encoding"] = "UTF-8"
return response
This will work if you use a regular link or a form to submit the request, but since you’re using $.ajax
, you may need to do additional work on the browser end to have the client download the file. It would be easier not to use $.ajax
.
👤AKX
0👍
Yep, a cleaner options, as stated by wardk would be, using 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
- [Django]-Custom Hyperlinked URL field for more than one lookup field in a serializer of DRF
- [Django]-No matter what I do, django-admin.py is not found, even though it's in my path
- [Django]-How do I get an Django ViewSet to return a 403 error on anonymous post
Source:stackexchange.com