0

I am generating MS word files through Python using docxtpl. I am trying to import the Humanities&Social Sciences text into an MS word file. But, I see Humanities Sciences printed in MS word.

I tried these combinations, but they did not work: Humanities&&Social Sciences, Humanities\&Social Sciences. What should I write in python so that when I import it into MS word, I see the full and complete text?

1 Answer 1

1

How Escaping works in docxtpl is given below. Following this will solve your issue.

By default, no escaping is done.

When you use a {{ }}, under the hood, you are modifying an XML word document, this means you cannot use all chars, especially <, > and &. In order to use them, you must escape them. There are 4 ways :

    context = { 'var':R('my text') } and {{r <var> }} in the template (note the r),
    context = { 'var':'my text'} and {{ <var>|e }} in your word template
    context = { 'var':escape('my text')} and {{ <var> }} in the template.
    enable autoescaping when calling render method: tpl.render(context, autoescape=True) (default is autoescape=False)

See tests/escape.py example for more informations.

Another solution, if you want to include a listing into your document, that is to escape the text and manage \n, \a, and \f you can use the Listing class

in your python code:

context = { 'mylisting':Listing('the listing\nwith\nsome\nlines \a and some paragraph \a and special chars : <>&') }

in your docx template just use {{ mylisting }}

With Listing(), you will keep the current character styling (except after a \a as you start a new paragraph).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.