Слияние субдоков Django docxtpl не объединяет все содержимое

Так что у меня есть действительно раздражающая проблема с django и docxtpl. У меня есть несколько заполнителей в документе, которые я пытаюсь заменить. Содержимое заполнителей состоит из html-контента. Сначала я помещаю это содержимое в поддокумент, основанный на основном документе (что работает, документ сохраняется, и все содержимое, которое было предоставлено в placeholder, находится внутри поддокумента).

Затем я пытаюсь объединить их, и вот здесь все становится очень странным. Как вы можете видеть, я сохраняю объединенный документ document.save("end_doc/doc.docx") # Save for local inspection. По какой-то причине, когда я открываю этот файл, он оказывается пустым. Но моя функция возвращает документ в память, как вы можете видеть, в этом файле есть некоторое содержимое, но оно отсутствует.

Например. Если мой контент placeholders содержит несколько элементов, например 5 тегов <p>. В объединенном файле отображается только 1 тег <p>. Но в поддокументе он показывает все теги.

Заранее спасибо

from docx import Document
from docxtpl import DocxTemplate
from htmldocx import HtmlToDocx
from docx import Document as _Document
def convert_placeholders_to_text_in_doc(document, context, document_name):
document = DocxTemplate(document)
sub_docs = {}

for placeholder, html_content in context.items():
    new_parser = HtmlToDocx()
    desc_document = _Document()

    try:
        # Convert HTML to a DOCX subdocument
        new_parser.add_html_to_document(html_content, desc_document)
        desc_result_path = f"temp_doc/{placeholder}-subdoc.docx"
        desc_document.save(desc_result_path)

        # Create subdocument for insertion
        sub_doc = document.new_subdoc(desc_result_path)
        sub_docs[placeholder] = sub_doc

    except Exception as e:
        raise Exception(f"Error processing placeholder '{placeholder}': {e}")

try:
    document.render(sub_docs)
except Exception as e:
    raise Exception(f"Error rendering main document: {e}")

document_io = io.BytesIO()
try:
    document.save("end_doc/doc.docx")  # Save for local inspection
    document.save(document_io)
    document_io.seek(0)
except Exception as e:
    raise Exception(f"Error saving rendered document: {e}")

return ContentFile(document_io.read(), name=document_name)

python версия: 3.11.9 docxtpl версия: 0.16.6 python-docx версия: 0.8.11 htmldocx версия: 0.0.6

Вернуться на верх