替换字典中的变量并使用 doc.render

问题描述

我正在使用 doc.render 编辑模板文档,并将它们替换为我的 Python 代码中的变量。但是,如果变量是一个数字,我不希望它被渲染,而是替换为 ''。我的问题是如何区分上下文和 doc.render 以仅替换某些变量。 目前我是这样做的

doc = DocxTemplate('Template.docx')
            context = {
                'acc':acceleration,'dpt':depth
            }
doc.render(context)

因此,如果加速度是一个数字,我希望模板中的 acc 为 '',其余部分正常工作

解决方法

据我了解 docxtpl 包,它与 jinja2 包一起在幕后工作。因此,一个选项是利用 jinja2 的强大功能和提供的 {% if users %} 条件。

我会在 python 中完成大部分逻辑,并且只使用模板库来填充和渲染模板。意思是,在python中对字典进行值转换,然后将此字典推送到render方法。

context = {'acc':acceleration,'dpt':depth}

# if the numeric values are given as strings
context_ = {k: v if not v.isnumeric() else "" for k,v in context.items()}
# if the numeric values are as numeric
context_ = {k: v if not any([isinstance(v,int),isinstance(v,float)]) else "" for k,v in context.items()}
doc.render(context_)