Python中的不可信模板 - 哪里有安全的库可用?

0 投票
2 回答
561 浏览
提问于 2025-04-15 15:54

我正在建立一个库,这个库会在多个Python应用程序中使用。它会从一个关系型数据库中获取多语言的电子邮件模板,然后在发送电子邮件之前,使用Python对模板中的变量进行替换。

除了变量替换之外,我还希望这个模板库能支持一些条件语句,比如if、elif和for循环。

我在大多数项目中使用Mako,也看过Tempita,因为它提供的功能比较简单,正好符合我的需求。

我担心的是不可信代码的执行——有没有人能推荐一个Python的模板解决方案,它要么不支持代码执行,要么可以让我禁用这个功能?

2 个回答

3

你有没有看看 Jinja2? 这个东西其实就是你说的那种,它强大又简单,不会让设计师拥有太多的控制权。 :)

如果你用过Django的模板系统,那它和Jinja非常相似(甚至可能是基于Jinja的?)。

4

来自Django书籍

所以,在Django模板中直接调用Python代码是不可能的。所有的“编程”基本上都只能在模板标签能做的范围内进行。虽然可以写自定义的模板标签来做一些任意的事情,但默认的Django模板标签故意不允许执行任意的Python代码。

可以试试Django模板。在Django应用之外设置起来有点麻烦——这和DJANGO_SETTINGS_MODULE有关,建议多查查——但还是值得信赖的。

撰写回答