循环内的 If 语句 - python-docx-template jinja
If statement inside for loop - python-docx-template jinja
我正在使用 Python-Docx-Template 动态创建可以打印在 Avery 标签上的地址标签。我在 MS Word 中找到了正确的 table 模板,并插入了一个 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')
我的word模板是:
我这样做 table 是因为 Avery 地址标签在地址所在的较大单元格之间有较薄的 table 单元格。这有助于格式化。如果我删除 IF 语句,一切正常,但最后会有额外的小 table 单元格,因为我正在为所有重复大 table 单元格和薄 table 单元格三个地址就行了。这不是一个大问题,但如果 addr_count == 3
(我已经尝试过 addr_count == '3'
和 addr_count == 3
并且周围有引号,我真的很想输入那个薄的 table 单元格这个数字没有任何区别。
这是我遇到的错误。
有谁知道如何在 python-docx-template 中使用嵌套在 FOR 循环中的 IF 语句?
将 {% endif %}
放在小单元格的内部而不是后面。
我不确定为什么会这样,实际上我花了相当多的时间来弄清楚其中的逻辑。但如果它有效,它就有效。
我正在使用 Python-Docx-Template 动态创建可以打印在 Avery 标签上的地址标签。我在 MS Word 中找到了正确的 table 模板,并插入了一个 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')
我的word模板是:
我这样做 table 是因为 Avery 地址标签在地址所在的较大单元格之间有较薄的 table 单元格。这有助于格式化。如果我删除 IF 语句,一切正常,但最后会有额外的小 table 单元格,因为我正在为所有重复大 table 单元格和薄 table 单元格三个地址就行了。这不是一个大问题,但如果 addr_count == 3
(我已经尝试过 addr_count == '3'
和 addr_count == 3
并且周围有引号,我真的很想输入那个薄的 table 单元格这个数字没有任何区别。
这是我遇到的错误。
有谁知道如何在 python-docx-template 中使用嵌套在 FOR 循环中的 IF 语句?
将 {% endif %}
放在小单元格的内部而不是后面。
我不确定为什么会这样,实际上我花了相当多的时间来弄清楚其中的逻辑。但如果它有效,它就有效。