Python模板引擎 - 一站式解决方案
项目描述
Tonnikala
Tonnikala 是一种基于 Kid 启发的 XML 语法构建的 Python 模板语言中的最新版本。它摒弃了 Kid 和 Genshi 的标签流和树的概念,并效仿 Chameleon 和 Kajiki,将模板直接编译成 Python 字节码。语法非常接近 Kajiki,但内部结构非常不同:Tonnikala 将代码编写为抽象语法树,并对生成的树进行了广泛的优化。此外,还有一个可选的加速模块(目前仅支持 Python 3),提供用于输出缓存的专用类。
示例
from tonnikala.loader import Loader
template_source = u"""
<table>
<tr py:for="row in table">
<py:for each="key, value in row.items()"
><td>${key}</td><td>${literal(value)}</td></py:for>
</tr>
</table>
"""
template = Loader().load_string(template_source)
ctx = {
'table': [dict(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10)
for x in range(1000)]
}
print(template.render(ctx))
模板继承
base.tk
<html>
<title><py:block name="title_block">I am ${title}</py:block></title>
<py:def function="foo()">I can be overridden too!</py:def>
<h1>${title_block()}</h1>
${foo()}
</html>
child.tk
<py:extends href="base.tk">
<py:block name="title_block">But I am ${title} instead</py:block>
<py:def function="foo()">I have overridden the function in parent template</py:def>
</py:extends>
模板导入
importable.tk
<html>
<py:def function="foo()">I am an importable function</py:def>
</html>
importer.tk
<html>
<py:import href="importable.tk" alias="imp" />
${imp.foo()}
</html>
FileLoader
要从文件加载模板,请使用 tonnikala.FileLoader 类
loader = FileLoader(paths=['/path/to/templates'])
template = loader.load('child.tk')
目前 FileLoader 会隐式地将所有加载的模板缓存到内存中。
模板
要渲染模板
result = template.render(ctx)
您可以指定一个块,或无参数的 def 来显式渲染
result = template.render(ctx, funcname='title_block')
Pyramid 集成
将 ‘tonnikala.pyramid’ 包含到您的配置中以启用 Tonnikala。当包含后,Tonnikala 会添加以下配置指令
- add_tonnikala_extensions(*extensions)
注册 Tonnikala 渲染器以用于这些模板扩展。默认情况下,Tonnikala 不会被注册为任何扩展的渲染器。例如: config.add_tonnikala_extensions(‘.html’,‘.tk’) 将使 Tonnikala 渲染器对具有这些扩展之一的模板有效。
- add_tonnikala_search_paths(*paths)
将给定的路径添加到 Tonnikala 搜索路径的末尾,以搜索模板。这些可以是绝对路径,也可以是 package.module:directory/subdirectory 风格的资产规范。默认情况下,不会显式搜索任何路径(但您始终可以使用资产规范来指定模板)。
- set_tonnikala_reload(reload)
如果设置为 True,则使 Tonnikala 不缓存模板。默认为 False。
这三个也可以通过 .ini 设置中的 tonnikala.extensions、tonnikala.search_paths 和 tonnikala.reload 来控制。
状态
Alpha,工作功能包括
结构元素 py:if、py:unless、py:def、py:for、py:replace、py:content
基本的模板继承:py:extends 和 py:block;子模板也会继承父模板中的顶级函数声明,并且子模板可以覆盖父模板定义并使用的全局函数。
使用 $simple_identifier 和 ${complex + python + "expression"} 进行表达式插值
布尔属性:<tag attr="${False}">、<tag attr="$True">
隐式转义
禁用隐式转义(literal())
为 Python 2 和 Python 3 提供的 C 语言速度优化
从另一个模板导入 def 块:py:import
使用 gettext 的基本 I18N
Pyramid 集成
即将推出的功能
结构元素:py:vars、py:switch、py:case;py:else 用于 for、if 和 switch。
覆盖属性,从字典中设置 attrs:py:attrs
将自定义标签映射到 py:def
可选的解析树本地化 I18N(部分完成)
将 JavaScript 作为目标语言
可插拔的前端语法引擎(部分完成)
METAL 类型的宏
类似于 Chameleon 的可插拔表达式语言
更好的模板继承
更好的文档
贡献者
Antti Haapala
项目详情
tonnikala-0.16.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fc65f2234b3bc143e529f52d362aa549e5bf57965a4e4b04ec7eb7609e86f49d |
|
MD5 | 116e86bf72273e2f3fe79460f6a1bb12 |
|
BLAKE2b-256 | 2b111999b642d34d7dba670ff2a54ac6a8f882cfbf5e84b6708f7c674e05e785 |