Слияние субдоков 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