Оператор if внутри цикла for - python-docx-template jinja

Я использую 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')

Мой шаблон слова:

введите описание изображения здесь

Я делаю таблицу таким образом, потому что метки адресов Avery имеют тонкую ячейку таблицы между большей ячейкой, где идет адрес. Это помогает с форматированием. Если я удалю оператор IF, все будет работать нормально, но в конце будет дополнительная маленькая ячейка таблицы, потому что я повторяю большую ячейку таблицы и тонкую ячейку таблицы для всех трех адресов в строке. Это не ОГРОМНАЯ проблема, но мне бы очень хотелось, чтобы эта тонкая ячейка таблицы НЕ вводилась, если addr_count == 3 (я пробовал addr_count == '3' и addr_count == 3, и наличие кавычек вокруг числа не имело никакого значения.

Вот ошибка, которую я получаю.

введите описание изображения здесь

Кто-нибудь знает, как использовать оператор IF, вложенный в цикл FOR в python-docx-template?


person j_allen_morris    schedule 05.09.2019    source источник
comment
Похоже, он не может найти один из ваших endif тегов. Глядя на шаблон, кажется, что во втором if выражении могли быть ошибки. Например, двоеточие в конце не нужно. Во-вторых, похоже, что между if и endif нет никакого содержимого.   -  person Ahndwoo    schedule 05.09.2019
comment
Я нашел одну ветку, в которой говорилось, что jinja нужна двоеточие. Может надо в тонкой ячейке пробел добавить? Я знаю, что содержимого нет, но есть ячейка таблицы, и это то, что я хочу распечатать ТОЛЬКО в первый или второй раз цикла, а не в третий.   -  person j_allen_morris    schedule 05.09.2019
comment
Понятно. Что касается двоеточия, ваш первый оператор if его не использует, и я полагаю, он работает нормально? Я сомневаюсь, что причина этого. Было бы намного проще отлаживать, если бы вместо фактической таблицы шаблон был таблицей XML или HTML.   -  person Ahndwoo    schedule 05.09.2019
comment
Что произойдет, если {% endif %} войдет в маленькую ячейку, а не после нее?   -  person Ahndwoo    schedule 05.09.2019
comment
Вот и все! Добавьте ответ, и я его выберу.   -  person j_allen_morris    schedule 05.09.2019


Ответы (1)


Поместите {% endif %} внутрь маленькой ячейки, а не после нее.

Я не уверен, почему это работает, на самом деле я потратил приличное количество времени, пытаясь разгадать логику. Но если работает, значит, работает.

person Ahndwoo    schedule 05.09.2019
comment
Я тоже не уверен, почему это работает, но, как вы сказали, если это работает, то работает и кого это волнует? - person j_allen_morris; 05.09.2019