Как правильно форматировать таблицы с переменным количеством строк в библиотеке python docxtpl?

Как правильно оформить шаблон .docx с использованием модуля docxtpl и jinja2 в Python, чтобы таблица в документе всегда содержала нужное количество строк? Мне нужно, чтобы в таблице было два столбца - наименование и цена. Также интересует, нужно ли создавать пустую таблицу в шаблоне, и если да, то сколько ячеек следует добавить. Я могу преобразовать данные в любой вид, так что это не проблема.

Пример таблицы в Python:
data = [
    ['наименование1', 'стоимость1'],
    ['наименование2', 'стоимость2']
]
  • 18 сентября 2023 г. 13:17
Ответы на вопрос 2
Для форматирования таблицы с переменным количеством строк в библиотеке python-docx и docxtpl, вам потребуется использовать цикл for в шаблоне .docx и передавать данные через контекст шаблона.

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

Вот пример шаблона с пустой таблицей:

```
{# шаблон.docx #}

{% for item in data %}
    {% set name = item[0] %}
    {% set price = item[1] %}

    |{{ name }}|{{ price }}|
{% endfor %}
```

Здесь мы используем цикл for, чтобы пройти по каждому элементу в переданных данных. Затем мы устанавливаем переменные "name" и "price" со значениями из каждого элемента. Затем мы заполняем таблицу значениями "name" и "price" с помощью переменных Jinja2.

Чтобы использовать этот шаблон и создать документ с данными, вы можете использовать следующий код:

```python
from docxtpl import DocxTemplate

data = [
    ['наименование1', 'стоимость1'],
    ['наименование2', 'стоимость2']
]

doc = DocxTemplate("шаблон.docx")
context = {"data": data}
doc.render(context)
doc.save("результат.docx")
```

Здесь мы передаем данные в контекст шаблона как словарь с ключом "data", соответствующим переменной в шаблоне. Затем мы рендерим шаблон с заданным контекстом и сохраняем полученный документ с помощью метода save(). В результате вы получите документ "результат.docx" с заполненной таблицей.

Обратите внимание, что представленный пример предполагает, что вы уже установили библиотеки docxtpl и jinja2. Если вы этого еще не сделали, вы можете установить их с помощью pip:

```
pip install python-docx
pip install docxtpl
pip install jinja2
```
{% for row in data %}
+---------------------------+---------+----------------+
| {% for col in row %}      | {{col}} | {% endfor %}   |
+---------------------------+---------+----------------+
{% endfor %}
Похожие вопросы