编写“代码” Jinja2 中的扩展

发布于 2024-12-29 04:56:18 字数 472 浏览 1 评论 0原文

我正在尝试为 Jinja2 编写一个扩展,以便我可以在模板中运行任意 python 代码(我有一个沙箱来安全地运行此代码)。我知道我可以使用 Mako 之类的东西,它允许嵌入 python 代码,但我更喜欢使用 Jinja2,因为我喜欢它的一般语法。

我打算在模板中执行的操作的一个示例:

{{ x }}

{% code %}
x = x + 1
{% endcode %}

{{ x }}

如果我使用 x = 1 渲染上面的模板,我希望输出是,

1
2

我根据文档上的示例编写了一个扩展。我可以使用 contextfunction 装饰器访问上下文,但它是不可变的。

在扩展程序的回调中,我想做这样的事情,

exec body in context

一些 Jinja2 大师可以帮助我吗?

I am trying to write an extension for Jinja2 so that I can run arbitrary python code in my templates (I have a sandbox to run this code safely). I know I can use something like Mako which allows embedding python code but I prefer using Jinja2 as I like it's syntax in general.

An example of what I intend to do in the template:

{{ x }}

{% code %}
x = x + 1
{% endcode %}

{{ x }}

If I render above template with x = 1, I expect the output to be,

1
2

I wrote an extension based on the example on the docs. I am able to access the context by using the contextfunction decorator but it is immutable.

Inside my callback in the extension, I would like to do something like this

exec body in context

Can some Jinja2 guru help me out here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文