【问题标题】:jinja table in docx with for and if conditon带有for和if条件的docx中的jinja表
【发布时间】:2021-10-04 10:38:03
【问题描述】:

我在 docx 中有一个表,我希望仅当字符串中存在子字符串时才将行添加到表中。已在此处包含我的表格模板图像: template for docx table

enter image description here 我有一个数据集 x,其中包含一组名称和数字,例如:{1:{ name:aryan,number:1},2:{anand,2},3:{aishwarya,3}}。我希望创建一个表格,以便我填充表格行,以便我只获得包含子字符串“arya”的名称数量。图像包含我能够制作的内容,但在 %tr 中存在复杂条件问题标签,请帮忙 请帮助正确实施。

需要的输出: |C1 | |---------------| | 1 | | 3 |

我能够过滤数据,但是由于 for 和 endfor 循环,表格中会添加额外的行和空格 请帮忙删除它。

from docxtpl import DocxTemplate

tpl = DocxTemplate('templates/dynamic_table_tpl.docx')
context  = {1:{ name:aryan,number:1},2:{name:anand,number:2},3:{name:aishwarya,number:3}}

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

模板(如图):

|C1   |c2    |c3              |c4.    |c5.         |
|--------------------------------------------------|
| {%tr for i in x %} {%tr if "arya" in i.name %}   |
|--------------------------------------------------|
|           {{ i.number}}                          |
---------------------------------------------------|
|{%tr endif %}{%tr endfor %}                       |
----------------------------------------------------

【问题讨论】:

  • 请不要包含图片。 直接包含您的代码
  • 如果您这样做,您可能会注意到您已经包含了两次完全无用的图像,其中根本没有代码(当然也不是模板)。当你在这的时候,解释一下'只有当子字符串存在于字符串中'的意思(哪个字符串?)。你问的是非常可行的,但要回答我们需要看到这个问题,而不是在虚空中猜测它;)
  • 我真的很想帮忙,相信我,但你的问题根本没有意义。 什么你想用jinja2做什么? 什么是“一组名称”?您需要提供一些代码(即使您不知道如何实现它:提供所需的输入和输出)。通过编辑问题来做到这一点——这样每个人都可以在不滚动 cmets 的情况下快速看到它。
  • 对,这样更清楚一点。请张贴您用来制作该表格的代码(我不知道如何使用 jinja 制作 docx 表格,我不会去寻找)。并将您的代码包装在 ``` 中,这样它就可以很好地呈现:)
  • 我发的图片是tpl的内容

标签: python jinja2 docx python-docx


【解决方案1】:

由于我看不到您的模板,据我了解,问题归结为拒绝名称中不包含“arya”的行。这在 jinja 中当然是可行的,但在我有一个真正的模板可以使用之前,我不会添加一个 jinja 解决方案。

在python中也很简单:

context  = {1:{ name:"aryan",number:1},2:{name:"anand",number:2},3:{name:"aishwarya",number:3}}
context = {k:v for k, v in context.items() if "ary" in v["name"]}
...

即只需在对行进行任何其他操作之前过滤行的字典。

顺便说一句,如果你的键真的只是数字,一次推进一个,字典只是一个昂贵的列表。

Jinja/python-docx 解决方案:

{% for row in x %}
   {%tr if "arya" in row.name %} {{ row.number }} {%tr endif %}
{% endfor %}

即像在 jinja2 中一样执行循环,并仅在需要时使用特殊的 {%tr %}

我假设 x 以某种方式绑定到 context,尽管我在调用代码中没有看到。

【讨论】:

  • 我无法对数据集或任何代码进行任何更改,我必须对模板做我能做的事情。 doc文件模板是word doc,图片链接中有表格
  • 现在您已经添加了模板代码,请参阅更新的答案。请注意,我没有(或想要)单词,而且我从未使用过 python-docx ---但这可以作为一个 jinja 问题来解决,所以我们可能没问题 :)
猜你喜欢
  • 1970-01-01
  • 2015-08-24
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2017-05-12
相关资源
最近更新 更多