gpt4 book ai didi

python - 在jinja获得更深入的评估

转载 作者:行者123 更新时间:2023-11-30 22:45:00 25 4
gpt4 key购买 nike

我有 jinja 的 python 函数,它返回一个包含 jinja 指令的字符串,如下所示:

def test():
# stuff ...
return "The value of x is {{x}}"

我将此函数设置到 jinja 的全局上下文中,现在我想使用它:

{% set x = 3 %}
{{ test() }}

不幸的是,“test”的返回值没有被评估,所以结果是:

The value of x is {{x}}

我可以以某种方式强制评估测试的结果吗?

最佳答案

你最好使用 jinja2 macro 。在这种情况下,您可能会将 x 传递给宏:

{% macro test(x) -%}
The value of x is {{x}}
{%- endmacro %}

{% set x = 3 %}
{{ test(x) }}

请注意,我已将 x 传递给了宏 - 确实没有充分的理由不传递 x 并且它使事情变得更加清晰。另外,我什至不确定如何让它隐式传递全局变量;-)。

<小时/>

另一种策略(我不建议这样做,因为清晰度降低并且搞砸的风险增加)是在回调函数中呈现模板:

from jinja2 import Template
def test(x):
return Template('The value of x is {{x}}').render(x=x)

这里我仍然将 x 传递给模板的上下文。 AFAIK,模板无法获取函数内的全局上下文(实际上,这会导致非常困惑的代码)。如果您确实在 test 函数中渲染模板,并且使用 autoescape=True,则必须小心,不要意外转义内容两次。

关于python - 在jinja获得更深入的评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41323156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com