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 шт):

Автор решения: Daniele_Taby

Чтобы принудительно скачать сгенерированный файл, ты можешь использовать объект HttpResponse в Django. Вместо использования функции render, которая возвращает HTML-страницу, ты можешь использовать HttpResponse с типом содержимого application/msword и установить заголовок Content-Disposition для указания имени файла. но возможно это не сработает, ну лучше попробуй)

→ Ссылка
Автор решения: borocko

@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("Файл не обнаружен обратитесь к Администратору")

Немного погуглил на тему вашего комментария, и в итоге отыскал то что надо!=)))

→ Ссылка