Python文本模板渲染



我有一个应用程序实现在Node.js有一个函数来呈现文本模板:

function render(template, args) {
// ...
}
render('${ foo.bar }, ${ baz }!', { foo: { bar: 'Hello' }, baz: 'World' });
// Hello, World!

在Node.js中,我使用一个流行的库lodash。

lodash.template('${ foo.bar }, ${ baz }!')({ foo: { bar: 'Hello' }, baz: 'World' });
// Hello, World!

现在我需要将此实现迁移到Python3. 我发现了一个类似的解决方案,使用内置的string模块:

from string import Template
Template('${foo}, ${bar}!').substitute({'foo': 'Hello', 'bar': 'World!'})
# Hello, World!
Template('${foo}, ${bar.baz}!').substitute({'foo': 'Hello', 'bar': { 'baz': 'World!' }})
# ValueError: Invalid placeholder in string

然而,它似乎是一个python字符串。模板不支持点访问字典子属性.

我的数据库中已经保存了很多用户提供的模板,所以我现在无法更新语法规则。

有办法解决这个问题吗?

Jinja2模板引擎:

import jinja2
t = jinja2.Environment(variable_start_string='${', variable_end_string='}').from_string('${foo}, ${bar.baz}!')
t.render(**{'foo': 'Hello', 'bar': {'baz': 'World'}})
# Hello, World!

最新更新