首页 > 解决方案 > 使用 jinja 在文档表中显示的附加行

问题描述

我编写了一个 jinja 代码,我想在其中将环境及其服务器添加到表中。期望的输出:期望的输出

这是我的 Jinja 代码:

金贾

我的 python 代码,其中上下文中的服务器包括环境和属性列表,例如上下文中的服务器,下面将是['Qualif',["Tomcat",7,i," "," "," ",""]]i 是服务器名称

doc = DocxTemplate("./word_excel_templates/documentation_template.docx")
context = {
    'headers' : ['Component', 'Component Version', 'Server FQDN', 'Application port', 'DB SID', 'DB Port', 'Infos'],
    'servers': []
    }
server_1= ["Tomcat",7,i," "," "," ",""]
#put environment in context as required env
context['servers'].append(environment)
context['servers'].append(server_1)
doc.render(context)        
doc.save("documentation_.docx")

现在这只是代码的一部分,我在上下文中的真正服务器是['Qualif',["Tomcat",7,i," "," "," ",""], 'Dev',["Tomcat",7,i," "," "," ",""]] 我得到的输出是这样的:

我得到的输出

我对 Jinja 很陌生,所以我不知道为什么要在表格中添加这些额外的单元格。还有另一种方法可以做到这一点吗?

标签: pythonjinja2

解决方案


这里实际发生的是,如果您的row is string条件等于 false,则将这些行绘制为空。为了避免这种情况,您可以完全改变策略。我假设每个服务器都会有它的“环境”标签,如果是这样的话,首先,将你的 word 文档的格式更改为:

在此处输入图像描述

然后,调整你的context结构如下:

context = {
'headers' : ['Component', 'Component Version', 'Server FQDN', 'Application port', 'DB SID', 'DB Port', 'Infos'],
'servers':  []
}

server_1 = {}
server_1['environment'] = 'Qualif'
server_1['cols'] = ["Tomcat",7,'a',5000," ",200,""]

server_2 = {}
server_2['environment'] = 'Dev'
server_2['cols'] = ["Tomcat",7,'b',5000," ",200,""]

context['servers'].append(server_1)
context['servers'].append(server_2)

这样,产生的输出将是:

在此处输入图像描述

相反,如果您希望将多个服务器合二为一environment,那么您应该调整上下文以使其具有类似的结构:

context = {
'headers' : ['Component', 'Component Version', 'Server FQDN', 'Application port', 'DB SID', 'DB Port', 'Infos'],
'servers':  
         {
           "Qualif": [],
           "Dev" : []
         }
}

server_1 = ["Tomcat",7,'a',5000," ",200,""]
server_2 = ["Tomcat",7,'b',5000," ",200,""]

context['servers']['Qualif'].append(server_1)
context['servers']['Qualif'].append(server_2)
context['servers']['Dev'].append(server_1)
context['servers']['Dev'].append(server_2)

你的word文件如下:

在此处输入图像描述

这就是你最终会得到的:

在此处输入图像描述


推荐阅读