使用python eval,string.template快速生成文本。
uftlib的Python项目详细描述
这个项目提供了一个允许非常灵活和快速的模板渲染而牺牲安全性的库。 它使用python代码生成变量,然后在string.template中替换这些变量。
示例
下面是一个基本示例:
fromuftlibimportUFTemplateinitial="""import datetime def f(x): return x*x def getnow(): return str(datetime.datetime.now()) a = 0 b = 100 i = 0"""oncycle="""a += 3 i += 1 s = f(i) b += a now = getnow()"""template="""Now = ${now} Render nr. ${i} f(${i}) = ${s} b = ${b} We live in ${where}"""tpl=UFTemplate(initial,oncycle,template,where="Indonezia")fortextintpl.render_many(1):print(text)
我们应该得到以下输出:
Now = 2015-08-25 16:09:07.015948 Render nr. 1 f(1) = 1 b = 103 We live in Indonezia
我们可以将模板重置为初始状态并获得相同的结果:
tpl.reset()fortextintpl.render_many(2):print(text)
您应该得到以下输出:
Now = 2015-08-25 16:09:07.016970 Render nr. 1 f(1) = 1 b = 103 We live in Indonezia Now = 2015-08-25 16:09:07.017298 Render nr. 2 f(2) = 4 b = 109 We live in Indonezia
警告
您可以在初始部分放置任何类型的python代码,例如打开和读取web页面, 连接到数据库,读取和解析其他文件,但这是以牺牲安全性为代价的, 恶意代码将在与解释器相同的环境中运行。这是一个折衷方案 这对所有的项目和需求都不是有利的,所以请自费使用这个库。
柔韧性
三个必需的参数(initial、oncycle和template)可以存储在数据库中,并且 可以由网络中的多个程序检索,这些程序并行并分发任务。 大多数模板引擎在模板中存储一些逻辑,在代码中存储一些 调用模板呈现,导致大混乱。用uftlib切那个角。