2个版本

0.1.2 2023年11月18日
0.1.0 2018年11月18日

#143模板引擎


用于 weft-erased

Apache-2.0

13KB
185

Weft: 可组合的HTML模板

CircleCI

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

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

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

可组合模板

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

面向语言 的设计

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

基于属性的

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

使用属性来控制标记渲染方式的想法来源于Zope的模板属性语言(通过Genshi)。这似乎工作得很好,因为它非常不显眼,意味着模板在浏览器中查看时能够自然渲染。

文章寻找Pythonic,基于XML的模板语言也非常好地解释了这些想法。

依赖关系

~7–14MB
~164K SLoC