From f446c47a0eb5111b7f0acc2afd38af48aed192e3 Mon Sep 17 00:00:00 2001 From: Eric Lapouyade Date: Thu, 11 Feb 2016 15:09:55 +0100 Subject: [PATCH] Add jinja_env render option --- CHANGES.rst | 5 +++++ docs/index.rst | 15 +++++++++++++++ docxtpl/__init__.py | 15 +++++++++------ tests/test_files/cellbg.docx | Bin 8195 -> 8195 bytes tests/test_files/order.docx | Bin 9339 -> 9339 bytes tests/test_files/richtext.docx | Bin 8890 -> 8890 bytes tests/test_files/subdoc.docx | Bin 56272 -> 56272 bytes 7 files changed, 29 insertions(+), 6 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 39efbc1..a86cdd5 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,8 @@ +0.1.10 (2016-2-11) +------------------ +- render() accepts optionnal jinja_env argument : + useful to set custom filters and other things + 0.1.9 (2016-1-18) ----------------- - better subdoc management : accept tables diff --git a/docs/index.rst b/docs/index.rst index 4ae68fe..387231c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -118,6 +118,21 @@ If you want to add dynamically changeable style, you have to use both : the `{{r You can change color, bold, italic, size and so on, but the best way is to use Microsoft Word to define your own *caracter* style ( Home tab -> modify style -> manage style button -> New style, select ‘Character style’ in the form ), see exemple in `tests/richtext.py` +Jinja custom filters +-------------------- + +``render()`` accepts ``jinja_env`` optionnal argument : you may pass a jinja environment object. +By this way you will be able to add some custom jinja filters:: + + from docxtpl import DocxTemplate + import jinja2 + + doc = DocxTemplate("my_word_template.docx") + context = { 'company_name' : "World company" } + jinja_env = jinja2.Environment() + jinja_env.filters['myfilter'] = myfilterfunc + doc.render(context,jinja_env) + doc.save("generated_doc.docx") Examples -------- diff --git a/docxtpl/__init__.py b/docxtpl/__init__.py index 01b1ff1..5d29d32 100644 --- a/docxtpl/__init__.py +++ b/docxtpl/__init__.py @@ -59,16 +59,19 @@ class DocxTemplate(object): return src_xml - def render_xml(self,src_xml,context): - template = Template(src_xml) + def render_xml(self,src_xml,context,jinja_env=None): + if jinja_env: + template = jinja_env.from_string(src_xml) + else: + template = Template(src_xml) dst_xml = template.render(context) dst_xml = dst_xml.replace('{_{','{{').replace('}_}','}}').replace('{_%','{%').replace('%_}','%}') return dst_xml - def build_xml(self,context): + def build_xml(self,context,jinja_env=None): xml = self.get_xml() xml = self.patch_xml(xml) - xml = self.render_xml(xml, context) + xml = self.render_xml(xml, context, jinja_env) return xml def map_xml(self,xml): @@ -76,8 +79,8 @@ class DocxTemplate(object): body = root.body root.replace(body,etree.fromstring(xml)) - def render(self,context): - xml = self.build_xml(context) + def render(self,context,jinja_env=None): + xml = self.build_xml(context,jinja_env) self.map_xml(xml) def new_subdoc(self): diff --git a/tests/test_files/cellbg.docx b/tests/test_files/cellbg.docx index b26514848853d65b9d20c3ac3b4085bfea891562..606cee7fcd3ece017c3e7ecd41c99ef0ca058e2e 100644 GIT binary patch delta 199 zcmZp6Xm;QY@MdNaVPIh3VE9$xy^*(>kr_yDp3KM(VJu}@2w`}#6hRpKSfg0LYNWYT zAtKJ)-&nySHiEOkB9m_kJq8OL5dO^sX6zHIVgoTITg%#k=^9xxFuhgQ8cctdwE@#c hauB*u&K=C(E$0BH|H;{cX*+p)Fx?;zQMX^-1pr_YOsN0> delta 199 zcmZp6Xm;QY@MdNaVPIh3U~r5y+Q{3?$PA=6PiEwYFqSecgfKi=iXe=AtWhjrHPT$F z5D{nYZ>(Su8^PINk;%7&9)krA2>)gRGxmv9v4I$qt!3@Nbd9VTnBFRD4W>WK+JI>z hIS5@S=MLuYmU95p|Kx1Jw4J;?m~N1VsM{~^0sz$}H}e1h diff --git a/tests/test_files/order.docx b/tests/test_files/order.docx index 68ccc5c098742d964917e7e6ea93efd31fb90ac8..afba0a7f1f9debdf2249e74fa791e185018302e3 100644 GIT binary patch delta 199 zcmezE@!Nwpz?+#xgn@y9gMq2idn0c%BQucRJeiRn!dS}0$^;f!%TfRlQDB?K0v6fH zr3w*w$o-8KEOJY5HdthGh45prK%B@Ai0(-7a4wL@n1SgW1#2+9O2Gz9 hzl72nitb>3k)i{b-l}K|roSrMgK2Xmi25=m7XbDTH{}2T delta 199 zcmdnxy33U}z?+#xgn@y9gTXb@Xd`bkBQucRJeiRn!dS}0#sn5w$C3{bQDA$?0v6%n zR)vU|@O)zhi|7jN1&d66EBqKNa9Koy8O-=6{*fKTnEXlJ4on*>n1SgW1#2+9O2Gz9 hzl72nitb>3k)i{b-l}K|roSrMgK2Xmi25=m7XUSIIDY^D diff --git a/tests/test_files/subdoc.docx b/tests/test_files/subdoc.docx index a4e389af713384a74ff0437112a0838a3216ea6f..2466f8aee1483ea97e820deeb0c37169c21cd125 100644 GIT binary patch delta 218 zcmcbxo%zCcX5IjAW)=|!1_llW_Db)KygiJ}Kzj2WMt%rm9n)e6BZQ?C!Z^dalpU<5 zgx4IZhVSWCu*kF{-&nzn{!@FwQj`79JO&Gxp4DdtGtw_abAT9=kKV8Y(`+}*z_k5M sYcO4V(*{iMfzrQkx`X+yw;aH92b4a2%NES%zHJYteQ!hb_1ty=0JhIcSO5S3 delta 218 zcmcbxo%zCcX5IjAW)=|!1_llW_ei6SygiJ}Kzj2WMt%rm9n)e6BZQ?C!Z^dalpU<5 zgx4IZhVSWCu*kF{-&nzn{!@FwQj`79JO&Gxp4DdtGtw_abAT9=kKV8Y(`+}*z_k5M sYcO4V(*{iMfzrQkx`X+yw;aH92b4a2%NES%zHJYteQ!hb_1ty=00CP|00000