1个不稳定版本

0.1.2 2023年11月18日

#509 in 模板引擎

Apache-2.0

16KB
178

Weft:可组合的HTML模板

CircleCI

为什么还需要另一种模板语言?

Weft受到Genshi模板语言的影响。在开源项目中常见的糟糕命名双关语传统中,由于Genshi意味着线程,因此我们将其命名为Weft,这是编织中使用的基线。

我们还有一些其他的主要目标。

可组合模板

应该像在Rust中处理数据结构一样容易组合模板片段。例如,许多语言使用Jinja 2风格的模板继承,然而这并不真正与Rust处理组合的方式相符,通常意味着验证这些模板的唯一方法是渲染整个页面。

语言导向设计

HTML模板通常涉及在不同上下文中组合不同的语言,例如HTML标记本身、URL参数、脚本等。许多引擎依赖于了解在哪种上下文中应用哪种转义来避免内容注入攻击。虽然我们无法一次解决所有这些问题,但我们至少旨在确保从端到端尽可能正确地形成输出标记。

基于属性

许多标记语言涉及在标记语言之上添加临时的标记层,以控制内容和渲染方式。XSLT通过定义基于基础标记语言(XML)的内容转换在很大程度上避免了这个问题,但它比我们需要用于模板语言的通用性要高得多,因此可能非常冗长。

使用属性来控制标记渲染的想法来自Zope的模板属性语言(通过Genshi)。这似乎效果很好,因为它非常不明显,并且意味着模板在浏览器中自然渲染。

文章寻找一种基于Python和XML的模板语言也对这些想法进行了很好的解释。

依赖项

~6–13MB
~147K SLoC