ASP.NET Core Library – scriban (Template Engine)

前言

有些项目会需要让 end user 写模板 (rich text) 同时又需要做一些 data binding. 这几乎是 programmer 的工作了...

在 C#, 大可以使用 Razor Engine 来处理. 但是它对 end user 来说太 advance 了. 而且一般上 end user 只是想做简单的 data binding 和一些 simple 的 logic 而已. 

于是就出现了许多比较简单的 template engine.

 

Template Engine Syntax

耳熟能详的有 EJS, handlebarsmustacheLiquid, 我觉得 React JSX 应该也可以算是一种吧.

EJS 的特点是 <% %> 符号, 它支持所以 js 语法.

handlebars 长这样

mustache, 它的特点是没有 if, for in 这些语法, 它用一些巧妙的招数来实现, 比如下面这个 if 逻辑, person 是一个 boolean

Liquid 是大名鼎鼎的电商系统 shopify 推出的.

npm tread 对比

比这个没有意思, 只是作为参考而已. 

比语法的话, 我会倾向于 mustache 和 Liquid. 看上去舒服, end user 学起来也相对简单.

 

.NET Environment

市场怎样和 .NET 怎样是差很远的. 毕竟 .NET 是一个很冷门的东西. 外面世界总是美丽的.

.NET 有几款 template engine, 最多 star (1.7k) 的是 scriban. 其它的参考: Benchmarks

它虽然是自己的语法, 但是和 Liquid 非常相识, 而且也部分支持 Liquid 语法.

 

Get Started

安装

dotnet add package Scriban --version 5.0.0

对象 data binding

var template = Template.ParseLiquid("Hello {{ product.name }}!");
var result = template.Render(new { Product = new { Name = "Product 1" } });
Console.WriteLine(result);

if logic

var template = Template.Parse(@"
    {{ if product.name == 'Product 1' }}
        This is a variable with 1
    {{ end }}
");
var result = template.Render(new { Product = new { Name = "Product 1" } });
Console.WriteLine(result.Trim());

其它的... TODO 等用到才补.

 

posted @ 2022-01-03 23:20  兴杰  阅读(749)  评论(0编辑  收藏  举报