Wie führe ich mit docxtpl mehrere „render()“-Aufrufe durch, ohne unaufgelöste Variablen zu verlieren?Python

Python-Programme
Anonymous
 Wie führe ich mit docxtpl mehrere „render()“-Aufrufe durch, ohne unaufgelöste Variablen zu verlieren?

Post by Anonymous »

Ich versuche, eine .docx-Vorlage mit der docxtpl-Bibliothek in Python zu füllen, aber ich muss es in mehreren Schritten tun, da ich nicht das gesamte Kontextwörterbuch auf einmal in den Speicher laden kann.
Das Problem besteht darin, dass docxtpl nach dem ersten render()-Aufruf mit einem Teilkontext alle Jinja2-Variablen und -Blöcke entfernt, die nicht bereitgestellt wurden. was es unmöglich macht, die verbleibenden Platzhalter später zu füllen.
Hier ist ein vereinfachtes Beispiel:

Code: Select all

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")
Nach dem ersten Renderschritt werden alle verbleibenden Variablen oder Jinja2-Blöcke (z. B. {{ ANOTHER_TABLE }} oder {% für ... %}) aus dem Dokument entfernt, sodass beim zweiten Rendern nichts geschieht.
Frage:

Gibt es eine Möglichkeit, mehrere partielle render()-Aufrufe mit docxtpl ohne Stripping durchzuführen? unaufgelöste Variablen oder Blöcke?
Gibt es alternativ eine bekannte Problemumgehung (z. B. das Einfrieren gerenderter Teile, die Verwendung von Platzhalterumleitungen oder eine andere Technik), die es ermöglicht, eine Vorlage in mehreren Schritten zu verarbeiten?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post