Хорошо, сейчас у меня есть функция в приложении django, которая создает текстовый документ, например, так:
def form_view(request):
if request.method == 'POST':
#do a bunch of things
context = {
'model_1' : model_1,
}
in_template = "Forms/mytemplate.docx"
doc = DocxTemplate(in_template)
doc.render(context)
out_filename = "outfile.docx"
http_word_response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
http_word_response['Content-Disposition'] = 'attachment; filename=%s' % out_filename
doc.save(http_word_response)
return http_word_response
else:
return render( request, 'mysite/form.html', context)
Итак, сейчас файл обслуживается как переменная http_word_response
и работаетотлично
Я хочу изменить это так, чтобы файл действительно создавался и сохранялся в S3, но я бы не хотел сначала сохранять файл локально, а просто использовать потоковую функцию пакета python-docx: https://python -docx.readthedocs.io / en / latest / user / documents.html # открытие файла-подобного-документа
Вот пример, который он дает:
with open('foobar.docx', 'rb') as f:
source_stream = StringIO(f.read())
document = Document(source_stream)
source_stream.close()
...
target_stream = StringIO()
document.save(target_stream)
Я не уверен, как преобразовать этот пример в чтение в моем файле шаблона и вывести файл / объект, который я могу затем отправить на S3 и что-то сделать.
Моя лучшая догадка началась бы так:
with open(in_template, 'rb') as f:
source_stream = StringIO(f.read())
doc = DocxTemplate(source_stream)
source_stream.close()
target_stream = StringIO()
document.save(target_stream)
Но потом я запутался в том, куда идет моя часть doc.render(context)
и как я могу изменить имя target_stream
наимя файла, которое я хочу.
Любая помощь по началу работы с этим приветствуется.