Как сделать вывод списка из функции в docx через docxtpl?
В продолжение темы.
Есть словарь:
dataorg = {'ДопВидДеят': [
{'Код': '10.11', 'Текст': 'Переработка и консервирование мяса', 'Дата': '2017-06-29'},
{'Код': '10.12', 'Текст': 'Производство и консервирование мяса птицы', 'Дата': '2017-06-29'},
{'Код': '10.13.3', 'Текст': 'Производство мясных (мясосодержащих) консервов', 'Дата': '2017-06-29'}
]}
from docxtpl import DocxTemplate
file1 = DocxTemplate("file1.docx")
def okve():
for i in range (0, len(dataorg['ДопВидДеят'])):
ok = '- ' + dataorg['ДопВидДеят'][i]['Текст'] + ';'
yield ok
con1 = {
'okved' : "\n".join(okve());
}
file1.render(con1)
file1.save('file.docx')
в file1.docx поставлен тег {{ okved }}
Вывод в Python через print показывает всё отлично:
- Переработка и консервирование мяса;
- Производство и консервирование мяса птицы;
- Производство мясных (мясосодержащих) консервов;
А вот вывод в файле docx даёт список без переводов на новую строку:
- Переработка и консервирование мяса; - Производство и консервирование мяса птицы; - Производство мясных (мясосодержащих) консервов;
Экспериментировал в подстановку строки "\n".join(okve()); вместо "\n" различные варианты:
\r, символы юникода, скрытые символы Word, функцию RichText() из docxtpl, не помогло.
Ищу дополнительные варианты решения вопроса.
PS Метка docxtpl не ставится.
Ответы (1 шт):
Из документации:
The
RichText()orR()offers newline, new paragraph, and page break features : just use\n,\a, or\fin the text, they will be converted accordingly....
context = { 'var':R('my text') }and{{r <var> }}in the template (note ther)
Т.е. в file1.docx должно быть {{r okved }} и в коде:
from docxtpl import DocxTemplate, R
con1 = {'okved' : R("\n".join(okve()))}