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)
26KB
588 行
Weft: 可组合HTML模板
为什么还需要另一种模板语言?
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