我在 Django Rest Framework 中有一个 API,并遇到了 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,甚至尝试过使用中间件来清除session。最后,您尝试设置标志 is_rendered = False
我也面临着同样的麻烦。