Make headers and footers work with both python-docx 0.8.7 and 0.8.10
This commit is contained in:
parent
114e5149bc
commit
17a2c6e1fe
@ -12,6 +12,7 @@ __version__ = '0.6.4'
|
|||||||
from lxml import etree
|
from lxml import etree
|
||||||
from docx import Document
|
from docx import Document
|
||||||
from docx.opc.oxml import serialize_part_xml, parse_xml
|
from docx.opc.oxml import serialize_part_xml, parse_xml
|
||||||
|
from docx.opc.part import XmlPart
|
||||||
import docx.oxml.ns
|
import docx.oxml.ns
|
||||||
from docx.opc.constants import RELATIONSHIP_TYPE as REL_TYPE
|
from docx.opc.constants import RELATIONSHIP_TYPE as REL_TYPE
|
||||||
from jinja2 import Environment, Template, meta
|
from jinja2 import Environment, Template, meta
|
||||||
@ -236,8 +237,8 @@ class DocxTemplate(object):
|
|||||||
|
|
||||||
def get_headers_footers_xml(self, uri):
|
def get_headers_footers_xml(self, uri):
|
||||||
for relKey, val in self.docx._part._rels.items():
|
for relKey, val in self.docx._part._rels.items():
|
||||||
if (val.reltype == uri) and (val._target._blob):
|
if (val.reltype == uri) and (val.target_part.blob):
|
||||||
yield relKey, self.xml_to_string(parse_xml(val._target._blob))
|
yield relKey, self.xml_to_string(parse_xml(val.target_part.blob))
|
||||||
|
|
||||||
def get_headers_footers_encoding(self,xml):
|
def get_headers_footers_encoding(self,xml):
|
||||||
m = re.match(r'<\?xml[^\?]+\bencoding="([^"]+)"',xml,re.I)
|
m = re.match(r'<\?xml[^\?]+\bencoding="([^"]+)"',xml,re.I)
|
||||||
@ -253,7 +254,8 @@ class DocxTemplate(object):
|
|||||||
yield relKey, xml.encode(encoding)
|
yield relKey, xml.encode(encoding)
|
||||||
|
|
||||||
def map_headers_footers_xml(self, relKey, xml):
|
def map_headers_footers_xml(self, relKey, xml):
|
||||||
self.docx._part._rels[relKey]._target._blob = xml
|
part = self.docx._part._rels[relKey].target_part
|
||||||
|
self.docx._part._rels[relKey]._target = XmlPart.load(part.partname, part.content_type, xml, part.package)
|
||||||
|
|
||||||
def render(self, context, jinja_env=None, autoescape=False):
|
def render(self, context, jinja_env=None, autoescape=False):
|
||||||
if autoescape:
|
if autoescape:
|
||||||
|
|||||||
2
setup.py
2
setup.py
@ -59,7 +59,7 @@ setup(name='docxtpl',
|
|||||||
license='LGPL 2.1',
|
license='LGPL 2.1',
|
||||||
packages=['docxtpl'],
|
packages=['docxtpl'],
|
||||||
install_requires=['six',
|
install_requires=['six',
|
||||||
'python-docx<=0.8.7', # newer docx package breaks header/footer management in docxtpl
|
'python-docx',
|
||||||
'jinja2',
|
'jinja2',
|
||||||
'lxml'],
|
'lxml'],
|
||||||
extras_require={'docs': ['Sphinx', 'sphinxcontrib-napoleon']},
|
extras_require={'docs': ['Sphinx', 'sphinxcontrib-napoleon']},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user