В функцию представления Django передать дополнительные парметры

подскажите пожалуйста, есть простенькая функция в views.py

def show_admin_custom_page(request, id_driver :int):
    driver = get_object_or_404(Driver, id=id_driver)
    return render(request,'custom_page/save_data_doc.html', context={
        'driver': driver,
    })

Передается id по id из базы идут нужные данные, все ок. Но теперь мне надо сюда добавить еще и рендер docx, для этого использую docxtpl.

from docxtpl import DocxTemplate
doc = DocxTemplate('test.docx')
context = {'director': "Иванов Иван"}
doc.render(context)
doc.save('test-final.docx')

То есть в момент передачи id мне надо как то получить данные передающиеся в шаблон, и передать в контекст для дальнейшего рендера в docx. Как можно объединить эти две функции?

def show_admin_custom_page(request, id_driver :int):
    driver = get_object_or_404(Driver, id=id_driver)
    tpl = DocxTemplate('test.docx')
    cntxt = {'director':driver.last_name}
    tpl.render(cntxt)
    tpl.save('test2.docx')
    return render(request,'custom_page/save_data_doc.html', context={
        'driver': driver,
    })

Пытаюсь как то вот так это реализовать, но вылетает ошибка PackageNotFoundError at хотя test.docx находится в той же дирректории, и это 100 процентов именно docx формат


Ответы (1 шт):

Автор решения: borocko
@login_required
def show_admin_custom_page(request, id_driver :int):
    driver = get_object_or_404(Driver, id=id_driver)
    tpl = DocxTemplate(r'C:\Users\user\PycharmProjects\albfreit\custom_page\test.docx')
    cntxt = {'director':driver.last_name}
    tpl.render(cntxt)
    tpl.save(r'C:\Users\user\PycharmProjects\albfreit\custom_page\test2.docx')
    return render(request,'custom_page/save_data_doc.html', context={
        'driver': driver,
    })

Супер, я разобрался! Проблема заключалась в неправильно указанном пути, то есть путь был правильным, но по какой то причине docxtpl не принимает относительный путь, поэтому указал явный путь, и все сработало !!=))

→ Ссылка