docxtpl for 循环中重复渲染数据

问题描述 投票:0回答:1

我在 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

首次下载: enter image description here

第二次下载: enter image description here

我对函数做了一些修改,比如完全使用内存中的文件。我还尝试过使用Django的never_cache、clearsession,甚至尝试过使用中间件来清除session。最后,您尝试设置标志 is_rendered = False

python django django-rest-framework jinja2 docxtpl
1个回答
0
投票

我也面临着同样的麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.