好吧,我继续使用 python-docx-template。
我正在为一些表格制作模板,特别是这个:
我正在寻找的结果表是这样的(不考虑日期/fecha):
最初的想法是该表将接收来自实验室结果的数据,但立法可能会有所不同(结果可以通过决议或法令进行比较),我用字典制作了一些列表来填充表并将信息放入表中,但抛出一个错误,我正在研究,一切似乎都是这样,表以这种方式嵌套循环,并在尝试在立法列表中查找“cols”时生成错误。
这是代码,比任何东西都更清单:
from docxtpl import DocxTemplate
# Cargar plantilla
doc = DocxTemplate('template/prueba.docx')
# Parametros
puntos = ['EPO-ARD-DO1: ENTRADA PLANTA DE TRATAMIENTO ARD', 'EPO-ARD-DO2: SALIDA PLANTA DE TRATAMIENTO ARD']
codSample = ['MCS 17466', 'MCS 17465']
... Many lists ...
# Sample list
norma2 = 'law name'
legis3 = [
{'art 2.2.3.3.9.14' : 'N.E.', 'art 2.2.3.3.9.16' : 'N.E.', 'art 2.2.3.3.9.17' : 'N.E.', 'art 2.2.3.3.9.18' : 'N.E.'},
{'art 2.2.3.3.9.14' : 'N.E.', 'art 2.2.3.3.9.16' : 'N.E.', 'art 2.2.3.3.9.17' : 'N.E.', 'art 2.2.3.3.9.18' : 'N.E.'},
{'art 2.2.3.3.9.14' : 'N.E.', 'art 2.2.3.3.9.16' : 'N.E.', 'art 2.2.3.3.9.17' : 'N.E.', 'art 2.2.3.3.9.18' : 'N.E.'},
... more things ...
]
# extract articles of law
art_limi = legis3[0].keys()
# Context
context = {
'puntos' : puntos,
'cdSam' : codSample,
'lab_results' : resultados,
'norma' : norma2,
'articulos' : art_limi,
'legis' : legis3
}
doc.render(context)
# Guardar documento
doc.save('output/salidaPrueba2.docx')
这就是我得到的错误:
File "c:\xampp\htdocs\pythonDocx\prueba.py", line 132, in <module>
doc.render(context)
File "C:\Python\Python311\Lib\site-packages\docxtpl\template.py", line 368, in render
xml_src = self.build_xml(context, jinja_env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python\Python311\Lib\site-packages\docxtpl\template.py", line 315, in build_xml
xml = self.render_xml_part(xml, self.docx._part, context, jinja_env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python\Python311\Lib\site-packages\docxtpl\template.py", line 245, in render_xml_part
raise exc
File "C:\Python\Python311\Lib\site-packages\docxtpl\template.py", line 239, in render_xml_part
dst_xml = template.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python\Python311\Lib\site-packages\jinja2\environment.py", line 1301, in render
self.environment.handle_exception()
File "C:\Python\Python311\Lib\site-packages\jinja2\environment.py", line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File "<template>", line 11, in top-level template code
File "C:\Python\Python311\Lib\site-packages\jinja2\environment.py", line 485, in getattr
return getattr(obj, attribute)
^^^^^^^^^^^^^^^^^^^^^^^
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'cols'
我正在考虑将一些数据作为结果列表的允许限制传递,但我不知道如何很好地适应标题。
我现在有点陷入困境,希望得到一些帮助来推动这张桌子的发展。
提前致谢。
好吧,当我尝试分离表格时,我得到了正确的渲染,我分离了表格以观察是否只有一个表格有问题或发生了什么,在该示例中,我将更改比较法则并获得良好的结果替代品。
对于单独的表来说效果很好,但重点是这种替换从查询开始就适用于表。
看最后一行,显然是:
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'cols'
这是错误的原因。
看Word代码:cols是lab_results元素的属性。
lab_results 定义为名为 resultados 的变量的值。
但是我看不到名为 resultados 的变量的任何定义。 看起来你丢失了主变量!它发生了。
那么,你能自己检查一下这个错误吗?当然! 好的做法是使用 flake8 工具检查代码。
我帮你检查了你的代码,flake8 确认了我的建议:
sp.py:46:20: F821 undefined name 'resultados'