Django - редирект на созданный файл docx
впал в ступор и не могу понять, что делать. В Django при переходе по ссылке вида:
http://127.0.0.1:8000/saverout/2
создается word файл docx, куда подставляются данные из переменных из view.py, средствами библиотеки docxtpl. С генерацией файла проблем нет, но мне надо теперь после перехода на
http://127.0.0.1:8000/saverout/2
принудительно скачать сгенерированный файл, как это сделать, ума не приложу, буду благодарен за любую помощь.
@login_required
def save_rout_car(request, id_rout :int):
rou_car = get_object_or_404(Rout_car, id=id_rout)
full_path = os.path.join(Path(__file__).parent, 'blank_rout.docx')
now = datetime.datetime.now()
now_to = now.strftime("%Y%m%d")
folder_path = fr'C:\Users\user\PycharmProjects\albfreit\doc_track_app\output\{now_to}'
file_name = f'{rou_car.car_driver.last_name}-{rou_car.car_driver.first_name}-{datetime.date.today()}.docx'
if not os.path.exists(folder_path):
os.makedirs(folder_path)
full_path_save = os.path.join(folder_path,file_name)
# full_path_save = os.path.join(Path(__file__).parent, f'{rou_car.car_driver.last_name}-{rou_car.car_driver.first_name}-{datetime.date.today()}.docx')
tpl = DocxTemplate(full_path)
f = Rout_car.objects.get(id=id_rout)
s = f.rout_driver.all()
stringer = ''
for i in s:
stringer += (str(i))
cntxt = {'carwhere_in':rou_car.car_where_in,
'carwhere_out':rou_car.car_where_out,
'rout_regions':stringer,
}
tpl.render(cntxt)
tpl.save(full_path_save)
return render(request,'doc_track_app/save_data_doc.html', context={
'rout_car': rou_car,
})
Ответы (2 шт):
Чтобы принудительно скачать сгенерированный файл, ты можешь использовать объект HttpResponse в Django. Вместо использования функции render, которая возвращает HTML-страницу, ты можешь использовать HttpResponse с типом содержимого application/msword и установить заголовок Content-Disposition для указания имени файла. но возможно это не сработает, ну лучше попробуй)
@Daniele_Taby спасибо большое, второй раз выручаешь меня !
if os.path.exists(full_path_save):
with open(full_path_save,'rb') as worddoc:
content = worddoc.read()
response = HttpResponse(content, content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
response['Content-Disposition'] = f'attachment; filename={file_name}.docx'
response['Content-Length'] = len(content) # calculate length of content
return response
else:
return HttpResponse("Файл не обнаружен обратитесь к Администратору")
Немного погуглил на тему вашего комментария, и в итоге отыскал то что надо!=)))