7个版本
0.4.3 | 2022年4月22日 |
---|---|
0.4.2 | 2022年4月22日 |
0.2.0 | 2022年2月8日 |
0.1.1 | 2021年12月3日 |
0.1.0 | 2020年9月8日 |
#198 in 模板引擎
60次每月下载
用于 2 crate
130KB
3.5K SLoC
Templito
Siter背后的后端模板语言——一个静态网站生成器。
templito的独特之处
Templito模板在很大程度上类似于handlebars和Go模板,但它们有几个显著特点。
- 语言
- 模板的多个参数
- 可以在块的输出上运行函数
- 空白字符可以转义
- Rust
- 模板函数可以是闭包,因此它们可以附加数据到函数。
- 模板和函数管理器与模板分离,可以通用地切换。
示例
模板的基本结构
{{let title = "Page"}}\
<h1>{{first $title "Default Title"}}</h1>
{{if .cat}}\
{{for k v in .cat}}\
<p>{{$k}} = {{$v}}</p>
{{/for}}\
{{/if}}\
使用块
{{@md}}
Markdown
============================
Everthing between an '@<func>' and '\func' tags will run the function on the result of the contents.
for example the because this code is within an '@md' block, the contents will be treated as markdown.
(Assuming the md function is included by the FuncManager)
Ranges like this will create a bullet point list of items:
{{for k v in .items}}
* {{$v}}
{{- /for}}
{{/md}}
实际上任何字符串到字符串的函数都可以用作"@block"。
但它们的功能更强大。
{{@let lines}}
apple
cat
sandwhich
{{/let}}\
{{for k v in split $lines}}
<p>{{$v}}</p>
{{/for}}
将输出
<p>apple</p>
<p>cat</p>
<p>sandwhich</p>
根据安全情况,您可以选择是否允许"exec"函数。("exec"默认不包含)
{{for k v in split (exec "cat" "path/to/file") "\n"}}
<p>{{$k}} = {{$v}}</p>
{{/for}}
控制流
-
"let"
创建变量(在其余文档中使用){{let x=3;y=9;list=["fish","dog"]}}
-
"export"
导出变量可以作为导出映射返回给调用程序
-
"if"、"elif"和"else"
控制流,仅在条件满足时解析内容,否则查看elif和else {{if gt $x 3}}{{$x}}{{elif gt $y 3}}{{$y}}{{else}}Something else{{/if}} //输出: 9
-
"return"
返回一个值而不是主字符串
-
"for"
遍历列表或值。这需要命名索引和值(例如k和v){{for k v in $list}}list at {{$k}} equals {{$v}};{{/for}}
//输出: list at 0 equals fish;list at 1 equals dog;
-
"switch"和"case"
根据与模式匹配的值选择一个选项 {{- switch $list -}} {{- case [_,]}}List with second element {{$b}} {{- case {fish:} }}Map with fish element {{$f}} {{- /switch -}} //输出: List with second element dog
-
"as"
创建一个单独的switch case
{{as $list: [_,]}}{{$b}}{{/as}} //输出: dog
-
"define"和"global"
创建函数作为要运行的变量或添加到函数管理器的全局函数 {{define cat age}}I'm a cat aged {{$age}}{/define}} {{run $cat 55}} //输出: I'm a cat aged 55
-
"@let"和"@export"
从块的内容中创建一个本地或导出的变量;{{- @let a -}}我喜欢{{for k v in $list}}{{if eq $k 0}}和{{/if}}{{$v}}{{/for}} {{- /let -}} {{$a}} //输出:我喜欢鱼和狗
更新日志
V 0.4.0
关键字 "as" 现在存在,可能会破坏同名的一些先前函数。现在可以使用 {{as val:pattern}}with pattern captures here}}
V 0.2.0
重大变更:函数现在需要一个描述,以便使系统的用户文档更容易。
Funcmanagers 现在也提供/要求一个方法来提供这些描述,以便任何使用该系统的软件都可以打印它们。
依赖项
~21MB
~204K SLoC