Docxtpl дублирует данные рендеринга в цикле for
У меня есть API на Django Rest Framework и я столкнулся с проблемой при работе с docxtpl. Я использую шаблон для заполнения одним рендером с глобальным контекстом, конвертирую файл в PDF и отправляю его на фронтенд для загрузки файла. Однако если я пытаюсь использовать эту функцию более одного раза, то в первоначально заполненном файле данные дублируются в цикле for документа шаблона. Другими словами, таблица, заполненная с помощью цикла for в шаблоне, которая изначально имеет одну заполненную строку, в итоге оказывается с двумя дублирующимися строками. Думаю, это как-то связано с функцией рендеринга. В какой-то момент я подумал, что решил эту проблему, установив флаг is_rendered в false перед использованием функции рендеринга. Это сработало, когда я тестировал, но до этого я перепробовал так много вещей, что понятия не имею, что действительно решило проблему. Когда я выключаю сервер Django, все возвращается в норму. Это означает, что заполненный документ работает хорошо, когда я пытаюсь загрузить его в первый раз, но он все еще не работает при второй попытке.
with io.BytesIO() as temp_docx_buffer:
with open("myapp/doc/Modelo_RADOC.docx", 'rb') as file:
conteudo_arquivo = file.read()
with io.BytesIO() as arquivo_em_memoria:
arquivo_em_memoria.truncate(0)
arquivo_em_memoria = io.BytesIO(conteudo_arquivo)
doc = DocxTemplate(arquivo_em_memoria)
temp_docx_buffer.truncate(0)
doc.is_rendered = False
doc.render(global_context)
doc.save(temp_docx_buffer)
html_content = docx_to_html(temp_docx_buffer.getvalue())
pdf_binary = convert_html_to_pdf(html_content)
lista_atividades_letivas_1.clear()
return pdf_binary
первая загрузка: введите описание изображения здесь
Вторая загрузка: введите описание изображения здесь
Я внес некоторые изменения в функцию, например, использовал файл полностью в памяти. Я также попытался использовать функции Django never_cache, clearsession и даже попробовал использовать промежуточное ПО для очистки сессии. И наконец, поэкспериментировал с установкой флага is_rendered = False