elapouya/python-docx-template

Nested for in table

jodyphelan opened this issue · 4 comments

Describe your problem

I would like to create a table like the example image below. I tried to use a nested for loop like

image

However this seems to ignore the initial loop and gives this:

image

Is there a way of using nested loops?

More details about your problem

Here is the code used to render the template:

from docxtpl import DocxTemplate

tpl = DocxTemplate('template.docx')

context = {
    'data': [
        {'type': 'Fruit', 'names': ['Apple', 'Banana']},
        {'type': 'Vegetable', 'names': ['Carrot', 'Onion']},
    ]
}

tpl.render(context)
tpl.save('output/result.docx')

I have the same question. It seems like nested tr loops are not supported yet. Will this be added to the plan? It would be very useful. @elapouya

Hi, this template produces the desired output:

nested_tr

Amazing thanks @dukre

@dukre thanks for your answer. I thought I could expand your solution to an extra inner loop but it didn't seem to give the desired result. Any suggestions would be appreciated!

The desired table would look like:
image

The current template looks like this:
image

But this produces the following:
image

Here is the code:

from docxtpl import DocxTemplate

tpl = DocxTemplate('template.docx')

context = {
    'data': [
        {
            'type': 'Fruit', 'items': [
                {
                    'name':'Apple', 
                    'colours':[
                      'green', 
                      'red'
                    ]},
                {
                    'name':'Banana', 
                    'colours':[
                        'yellow'
                    ]
                }
            ]
        },
        {
            'type': 'Vegetable', 'items': [
                {
                    'name':'Carrot', 
                    'colours':[
                        'orange'
                    ]
                },
                {
                    'name':'Onion', 
                    'colours':[
                        'white', 
                        'red'
                    ]
                },
            ]
        }
    ]
}

tpl.render(context)
tpl.save('result.docx')