Как выполнить несколько вызовов «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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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