C#Scriban教程展示了如何在C#中使用Scriban模板引擎。
Scriban模板引擎
模板引擎或模板处理器是一个库,旨在将模板与数据模型结合起来以生成文档。模板引擎通常用于生成大量电子邮件、源代码预处理或生成动态HTML页面。
我们创建了一个模板引擎,我们在其中定义了静态部分和动态部分。动态部分稍后会被数据替换。呈现功能稍后将模板与数据组合。模板引擎用于将模板与数据模型结合起来以生成文档。
Scriban使用{{}}
作为代码块和{%{}%}
forescape块。任何其他文本都被视为文本块并简单地输出asis。
Template.Parse
方法将文本数据解析为模板,Template.Render
使用提供的数据模型将模板呈现为最终输出。
$ dotnet add package Scriban
我们需要将Scriban
包添加到我们的项目中。
Scriban简单示例
以下是一个简单的Scriban示例。
using Scriban; var name = "John Doe"; var tpl = Template.Parse("Hello {{name}}!"); var res = tpl.Render(new { name = name }); Console.WriteLine(res);
程序向控制台打印一条小消息。
var tpl = Template.Parse("Hello {{name}}!");
Template.Parse
方法将指定的脚本文本解析为模板。使用{{}}
我们输出name
变量的内容。
var res = tpl.Render(new { Name = name });
Render
方法使用指定的对象模型呈现模板。
$ dotnet run Hello John Doe!
在下一个示例中,我们将两个变量传递给模板引擎。
using Scriban; var name = "John Doe"; var occupation = "gardener"; var txt = "{{name}} is a {{occupation}}"; var tpl = Template.Parse(txt); var res = tpl.Render(new { name, occupation }); Console.WriteLine(res);
程序使用来自两个变量的数据打印一条消息:name
和occupation
。
$ dotnet run John Doe is a gardener
scribanfor循环
循环是用for
指令创建的。
using Scriban; string[] words = { "sky", "blue", "falcon", "book", "ocean", "dog" }; var html = @" <ul> {{- for word in words }} <li> {{ word }} </li> {{- end }} </ul> "; var tpl = Template.Parse(html); var res = tpl.Render(new { words = words }); Console.WriteLine(res);
该示例使用for
指令将单词数组输出到HTML列表中。
{{- for word in words }} <li> {{ word }} </li> {{- end }}
我们遍历单词数组。-
字符去除左侧的空白字符。
$ dotnet run <ul> <li>sky</li> <li>blue</li> <li>falcon</li> <li>book</li> <li>ocean</li> <li>dog</li> </ul>
Scriban字符串函数
我们可以在模板中使用多个字符串函数。
using Scriban; var msg = "an old falcon"; var data = @" {{ msg | string.capitalize }} {{ msg | string.upcase }} The message has {{ msg | string.size }} characters. The message has {{ msg | string.split ' ' | array.size }} words. "; var tpl = Template.Parse(data); var res = tpl.Render(new { msg = msg }); Console.WriteLine(res);
我们有一条字符串消息。我们在消息上应用了几个字符串函数。
{{ msg | string.capitalize }} {{ msg | string.upcase }}
我们将消息大写。
The message has {{ msg | string.size }} characters.
我们计算消息中的字符数。
The message has {{ msg | string.split ' ' | array.size }} words.
我们计算消息中的字数。除了string.split
函数,我们还使用array.size
来获取拆分字符串数组的大小。
$ dotnet run An old falcon AN OLD FALCON The message has 13 characters. The message has 3 words.
Scribe数组函数
Scribe支持数组函数
using Scriban; int[] vals = { 2, 1, -3, 0, -1, -2, 3 }; var data = @" The array has {{ vals.size }} elements First element: {{ vals[0] }} Last element: {{ vals[-1] }} Sorted elements: {{ vals | array.sort}} "; var tpl = Template.Parse(data); var res = tpl.Render(new { vals = vals }); Console.WriteLine(res);
我们有一个整数数组。使用内置的数组函数,我们可以对元素进行计数并对它们进行排序。
$ dotnet run The array has 7 elements First element: 2 Last element: 3 Sorted elements: [-3, -2, -1, 0, 1, 2, 3]
抄写条件
我们可以在模板中使用if/elseif/else
条件。
using Scriban; string?[] names = { "John", "Nelly", null, "George" }; var data = @" {{- for name in names -}} {{ if !name }} Hello there! {{ else }} Hello {{name}}! {{ end }} {{- end }}"; var tpl = Template.Parse(data); var res = tpl.Render(new { names = names }); Console.WriteLine(res);
我们有一个名字数组。使用if条件,我们检查元素是否不为空。
$ dotnet run Hello John! Hello Nelly! Hello there! Hello George!
Scriban从文件中读取模板
在下面的示例中,我们从文件中读取模板文件。
<table> <thead> <tr> <th>Name</th> <th>Occupation</th> </tr> </thead> <tbody> {{- for user in users }} <tr> <td>{{ user.name }}</td> <td>{{ user.occupation }}</td> </tr> {{- end }} </tbody> </table>
模板文件以HTML表格形式输出数据。
using Scriban; var users = new List<User> { new ( "John Doe", "gardener"), new ( "Roger Roe", "driver"), new ( "Lucy Smith", "teacher") }; var fileName = "users.tpl"; var data = File.ReadAllText(fileName); var tpl = Template.Parse(data); var res = tpl.Render(new { users = users }); Console.WriteLine(res); record User(string Name, string Occupation);
数据存储在记录列表中。模板文件使用File.ReadAllText
方法加载。
$ dotnet run <table> <thead> <tr> <th>Name</th> <th>Occupation</th> </tr> </thead> <tbody> <tr> <td>John Doe</td> <td>gardener</td> </tr> <tr> <td>Roger Roe</td> <td>driver</td> </tr> <tr> <td>Lucy Smith</td> <td>teacher</td> </tr> </tbody> </table>
在本文中,我们使用了C#中的Scriban模板引擎。
列出所有C#教程。