从python3中获取jinja2模板变量

2024-10-03 13:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pythonjinja2使用模板从相同的数据生成定制的报告(例如:能够导出到xmljsontxt或定制结构,而无需更改python脚本的任何行)。你知道吗

我希望用户只修改模板文件来配置它的报告,因此使用变量来定义文件名和其他参数。你知道吗

模板示例:

{# HEADER -#}
{% set filename = 'custom-report.txt' -%}

{# BODY -#}
{% for item in items -%}
Date = {{ item["Date"] }}
Action = {{ item["Action"] }}
Result = {{ item["Result"] }}

{% endfor %}

从python中,是否可以检索文件名值(在本例中为“custom-report.txt”),以便我知道要使用的文件名是什么?你知道吗

谢谢你的帮助!你知道吗

编辑:

为了更好地理解,下面是一个我期望从python得到的示例:

template = templateEnv.get_template(template_path)
rawoutput = template.render(items=items)

output_filename = template.getVariable('filename')

with open(output_filename, "w") as stream:
    stream.write(rawoutput)

其中“getVariable”方法就是我想要得到的。你知道吗


Tags: reporttxt模板示例date文件名报告custom
1条回答
网友
1楼 · 发布于 2024-10-03 13:24:59

更新

同样地,您也可以在模板中返回items。在您的上下文中,只需添加一个变量filename = 'custom-report.txt' # or whatever you need,在呈现中只需使用{{ filename }}来显示它。你知道吗

一个带有jinja2包的简单示例

import jinja2
t = jinja2.Template("This is the filename: {{ filename }}!")
print t.render(filename ="custom-report.txt")

模板也可以是您的文件。你知道吗

因此需要python从模板中读取变量。如果没有一个框架,也就是说flask,这个框架有一个请求对象来传递值,那么这是做不到的。我建议的一个解决方案是用python读取模板并对其进行解析,以找到所需的文本。即 以上模板按原样给出

template = templateEnv.get_template(template_path)
rawoutput = template.render(items=items)

output_filename = open('a.txt', 'r').read().split('{% set filename = \'')[1].split('\'')[0]
print(output_filename)

with open(output_filename, "w") as stream:
    stream.write(rawoutput)

这样就可以解析整个模板并拆分文件名。不是最好的方法,但如果你保持一个标准格式。你知道吗

相关问题 更多 >