【问题标题】:(Docxtpl) How to add conditional statement to a value in a existing template(Docxtpl) 如何将条件语句添加到现有模板中的值
【发布时间】:2023-01-26 18:46:26
【问题描述】:

我想就我的以下问题寻求您的帮助。几天来我一直在为这个问题而苦苦挣扎。

我有一个 word 模板,如下所示,在 docx 中。

===============

Name: {{ Personal_name }}
Age:{{ Personal_Age }}
Teenager/Adult: {% if Personal_Age ==18 %} 
Teenager 
{% else %} 
Adult 
{% endif %}

根据条件语句,“Teenager/Adult”值应为“Teenager”。但是,该值仍然显示为“Adult”,这表明条件语句不起作用。每个人都可以让我知道它的问题是什么吗?

还有,大家有没有教教我如何把“Age”的背景色变成红色,如果“Age”输入为空,会弹出一个评论框?

这也是我的脚本供您参考。

================================================ ======

from docxtpl import DocxTemplate,RichText
doc=DocxTemplate('test_word_2.docx')
context={'Personal_name':'Charlie','Personal_Age':RichText(18,color='FF0000',bold=True)}
doc.render(context)
doc.save('test_word_2_test'+'.docx')  

================================================ =

当前的最终输出附在此处

谢谢大家。

【问题讨论】:

  • 我没有使用过那个库,但你正在传递一个 RichText(18, ...) 实例,它会根据整数 18 进行检查。
  • 我不能将 18 传递给 RichText 吗?但是我需要在 RichText 函数中使用颜色函数和粗体样式。
  • 不可以,但比较似乎永远不会评估为 True。 RichText 不再是值 18,而是一个包含格式信息的包装器。这是完全不同的东西。最简单的方法是向 context 添加一个新变量,例如 Personal_Age_int,它只包含 18,并且可以在模板中进行比较

标签: python word docxtpl


【解决方案1】:

RichTextint 之间的相等检查将始终为假,因为它们是不同的类型,并且不存在用于检查文本内容的 __eq__ 覆盖。 RichText source code

另外,似乎没有简单的方法来获取 RichText 内容。

最简单的解决方案是为编程处理添加一个新的上下文变量,同时保留 RichText 以供显示:

编辑: 我没有改变逻辑,但你似乎想检查< 18,因为你从 18 岁起就是成年人了?

from docxtpl import DocxTemplate,RichText

doc = DocxTemplate('test_word_2.docx')

personal_age = 18

context = {
  'Personal_name': 'Charlie',
  'Personal_Age': RichText(personal_age, color='FF0000', bold=True),
  'Personal_Age_int': personal_age
}
doc.render(context)
doc.save('test_word_2_test'+'.docx')  
Name: {{ Personal_name }}
Age:{{ Personal_Age }}
Teenager/Adult: {% if Personal_Age_int == 18 %} 
Teenager 
{% else %} 
Adult 
{% endif %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2019-10-05
    • 2013-08-02
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多