python - 使用 python-docx-template (docxtpl) 时遍历列表(或 dict)
问题描述
编辑:我必须承认我搞砸了并且没有下载所有的示例/测试。我下载了整个软件包,并找到了一些很棒的示例,这些示例向我展示了如何做我想做的所有事情。此特定问题显示在dynamic_table_tpl.py
和中dynamic_table.docx
。
我正在使用 python-docx-template 并创建了一个 DOCX 模板。我一直在尝试按照文档建议使用 jinja2 格式。我需要在我的 DOCX 文件中添加一系列地址。该数据来自数据库,我正在使用 python 从数据库中提取它。
这是我在 DOCX 模板文件中的内容:
{% for kid in kids %}
{kid.first}{kid.last}
{kid.addr1}{kid.addr2}
{kid.city}{kid.state}{kid.zip}
{% endfor %}
这是在我的 .py 文件中:
kids = [
[
('first','John'),
('last','Williams'),
('addr1','5555 NW 37th St')
('addr2','Apt 2601')
('city','Oklahoma City')
('state','OK')
('zip','73112')
],
[
('first','George'),
('last','Lucas'),
('addr1','1234 Dobbs St.')
('addr2','Suite 62')
('city','Moore')
('state','OK')
('zip','73160')
]
]
context = {
"kids" : kids
}
我查看了文档和示例,但还没有找到如何进行这项工作。如果我在数据库中有 2 个孩子,我希望结果看起来像这样:
John Williams
5555 NW 37th St., Apt 2601
Oklahoma City, OK 73112
George Lucas
1234 Dobbs St., Suite 62
Moore, OK 73160
该模板没有替换循环中的任何内容。它正在创建的 DOCX 中编写两个循环,在模板中我for kid in kids
只编写了一次循环。它以某种方式阅读它,但不完全是我需要它工作的方式。
任何帮助是极大的赞赏!
解决方案
在使用元组(括号的东西)时,不可能到达没有数字索引的元素。因此,最好的办法是通过类似的索引访问它们kid[1]
,或者在访问之前将元组转换为字典(IMO 这是最可靠的)
推荐阅读
- python - Yfinance:同时下载多个股票的多个参数(beta、mkt cap 等)?
- android-studio - 如何在 Android Studio 中使用虚拟摄像头?
- memory - 为什么即使数据超过 CPU 缓存,性能也会线性下降?
- ruby - LoadError: cannot load such file ... in simple Ruby script
- .net - EOF BOF 不一致.. 异常甚至 Recordset 的 RecordCount 也不止一个,仅在七台机器上的一台机器上
- laravel - 在 VueJS 和 Laravel 中使用 Axios 响应后无法访问 InertiaJS 道具
- google-cloud-platform - 无法将文件上传到 Google Cloud Shell
- python - PRAW Bot:尝试返回带有百分比的字数数值。在 Python 中
- python - 简单地解决不显示双重解决方案
- android - 何时在 Android 中使用多个 ViewModel 与共享 ViewModel?