Как выполнить несколько вызовов «render()» с помощью docxtpl без потери неразрешенных переменных?Python

Программы на Python
Anonymous
Как выполнить несколько вызовов «render()» с помощью docxtpl без потери неразрешенных переменных?

Сообщение Anonymous »

Я пытаюсь заполнить шаблон .docx с помощью библиотеки docxtpl в Python, но мне нужно сделать это в несколько шагов, поскольку я не могу загрузить весь контекстный словарь в память сразу.
Проблема в том, что после первого вызова render() с частичным контекстом docxtpl удаляет все переменные и блоки Jinja2, которые не были предоставлен, что делает невозможным позднее заполнить оставшиеся заполнители.
Вот упрощенный пример:

Код: Выделить всё

import re
from docxtpl import DocxTemplate

# First render
doc = DocxTemplate("template.docx")
doc.render({
"TABLE": [
{"a": 1, "b": 4},
{"c": 3, "d": 7}
],
})

# Second render
doc.render({
"ANOTHER_TABLE": [
{"a": 5, "b": 7},
{"c": 5, "d": 5}
],
})

doc.save("_generated.docx")
После первого шага рендеринга все оставшиеся переменные или блоки Jinja2 (например, {{ ANOTHER_TABLE }} или {% for ... %) удаляются из документа, поэтому второй рендеринг ничего не делает.
Вопрос:

Есть ли способ выполнить несколько вызовов частичного рендеринга() с помощью docxtpl без удаление неразрешенных переменных или блоков?
Альтернативно, существует ли какой-либо известный обходной путь (например, замораживание отображаемых частей, использование косвенного указания заполнителя или другой метод), который позволяет обрабатывать шаблон в несколько этапов?

Подробнее здесь: https://stackoverflow.com/questions/798 ... unresolved

Вернуться в «Python»