使用 python-docx-template (docxtpl) 时循环遍历列表(或字典)

Looping through a list (or dict) when using python-docx-template (docxtpl)

编辑:我必须承认我搞砸了,没有下载所有 examples/tests。我下载了整个包并找到了很棒的示例,这些示例向我展示了如何做我想做的一切。此特定问题显示在 dynamic_table_tpl.pydynamic_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 这是最可靠的)