循环中的if语句-python-docx-template jinja

时间:2019-09-05 17:55:51

标签: python jinja2 python-docx

我正在使用Python-Docx-Template动态创建可打印在Avery标签上的地址标签。我在MS Word中找到了正确的表模板,并插入了一个FOR循环来遍历这些地址。每行有3个地址,因此我设置了以下代码:

from docxtpl import DocxTemplate

tpl=DocxTemplate('templates/address_labels.docx')

context = {
    'tbl_contents' : [
    {'addrs':[
        {'addr_count':1,'first':'Peyton','last':'Manning','addr1':'123 Cherry St.','city':'Denver','state':'CO','zip':'12345'},
        {'addr_count':2,'first':'Patrick','last':'Mahomes','addr1':'123 KC BBQ Blvd','city':'Kansas City','state':'MO','zip':'12345'},
        {'addr_count':3,'first':'Tom','last':'Brady','addr1':'123 New England Cir','city':'Boston','state':'MA','zip':'12345'}]},
    {'addrs':[
        {'addr_count':1,'first':'Drew','last':'Brees','addr1':'123 Nola Way','city':'New Orleans','state':'LA','zip':'12345'},
        {'addr_count':2,'first':'Phillip','last':'Rivers','addr1':'123 Beachside Dr.','city':'Los Angeles','state':'CA','zip':'12345'},
        {'addr_count':3,'first':'Kyler','last':'Murray','addr1':'123 Dusty Rhoads Dr','city':'Phoenix','state':'AZ','zip':'12345'}
        ]}
    ]
}
tpl.render(context)
tpl.save('output/addr_labels.docx')

我的单词模板是:

enter image description here

我这样做是因为Avery地址标签在地址所在的较大单元格之间具有薄表单元格。这有助于格式化。如果删除IF语句,一切正常,但是末尾有多余的小表单元格,因为我要为该行上的所有三个地址重复大表单元格和瘦表单元格。这不是一个很大的问题,但是如果addr_count == 3(我尝试过addr_count == '3'addr_count == 3并在数字周围加引号的情况下,我真的很想让该精简表单元格不输入)没关系。

这是我遇到的错误。

enter image description here

有人知道如何使用python-docx-template中的FOR循环中嵌套的IF语句吗?

1 个答案:

答案 0 :(得分:1)

{% endif %}放在小型单元格内,而不是放在其后。

我不确定为什么这样做,我实际上花了很多时间试图弄清楚逻辑。但是,如果有效,它就会起作用。