Для цикла, не работающего для создания файла docx в docxtpl на python

#python #ms-word #python-docx

Вопрос:

Я использую docxtpl модуль для создания нескольких документов с данными, которые у меня есть. Мои данные хранятся в виде списка словарей. Я написал for цикл для этого, но на каждой итерации мой for цикл генерирует документ docx с информацией из первого словаря! У тебя есть какие-нибудь идеи, как я могу это исправить?

Я оставляю здесь образец кода на Python, чтобы дать лучший обзор проблемы!

 from docxtpl import DocxTemplate from docx2pdf import convert  doc = DocxTemplate('Hello.docx')  list = [{'name': 'John'}, {'name': 'Amin'}, {'name': 'Carl'}]  for i in range(3):  doc.render(list[i])  doc.save('test' str(i) '.docx')  

Мой docx так же прост, как:

 Hello my name is {{ name }}  

Я хочу создать 3 разных документа Word с именами Джон, Амин и Карл.

Ответ №1:

Ваш цикл for немного испорчен. И переменная list защищена, поэтому вам следует переименовать список:

 list_of_names = [{'name': 'John'}, {'name': 'Amin'}, {'name': 'Carl'}]  

Вместо этого я бы прошелся по самому списку и получил доступ к значениям прямо оттуда.

 for item in list_of_names:  doc.render(item)   doc.save(f"test{item['name']}.docx")  

Я не уверен, но вам, возможно, потребуется открывать документ шаблона с каждой итерацией. В этом случае код должен выглядеть следующим образом:

 for item in list_of_names:  doc = DocxTemplate('Hello.docx')  doc.render(item)   doc.save(f"test{item['name']}.docx")  

Пожалуйста, дайте мне знать, работает ли это так, как ожидалось 🙂

Комментарии:

1. замечательно! это сработало! Большое вам спасибо, правда! это было спасением жизни 🙂