3个版本

0.1.2 2023年11月18日
0.1.1 2019年7月23日
0.1.0 2018年11月18日

#35 in #mind


2 个crate中使用 (通过 weft)

Apache-2.0

26KB
588

Weft: 可组合HTML模板

CircleCI

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

Weft受到Genshi模板语言的启发。在开源中,为了模仿糟糕的命名双关语,由于Genshi意味着线程,我们将这个Weft命名为编织的基础线程。

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

可组合模板

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

面向语言设计

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

基于属性

许多标记语言涉及在标记语言之上添加一个临时的标记层,以控制内容和如何渲染。XSLT在很大程度上避免了这个问题,通过使用基本标记语言(XML)本身来定义内容转换,但它过于通用,对于模板语言来说不是必需的,因此可能非常冗长。

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

文章《寻找一种Pythonic的基于XML的模板语言》也很好地解释了这些想法,您可以在这里找到:In search of a Pythonic, XML-based Templating Language

依赖项

~6–13MB
~146K SLoC