用Scriban进行模版解析
前言
有些时候,我们需要根据模版去展示一些内容,通常会借助模版引擎来处理。
举个简单的例子,发短信。
短信肯定是有模版的,不同的场景对应不同的模版。
注册的,
【xxx】恭喜您成功注册yyy平台,您的帐号是zzz
支付的,
【xxx】您已成功支付,订单号为yyy,支付金额为zzz
还有很多其他。。。
如果存到数据库中,那么模版可能就会是
【{0}】您已成功支付,订单号为{1},支付金额为{2}
为的就是在代码中去格式化这个。
var tpl = "【{0}】您已成功支付,订单号为{1},支付金额为{2}";
var str = string.Format(tpl, "短信", "Order_123456", "200");
下面来看看用Scriban来处理。
Scriban
Scriban是一种快速,强大,安全和轻量级文本模板化语言和引擎。作者是Unity-Technologies的Alexandre Mutel
它支持两种模版,一种是自己的scriban模版,一种是liquid模版。
语法都差不多,不过最基本的文本替换应该能满足80%的需求了。
下面来看个例子就差不多了。
using Scriban;
using System;
using System.Collections.Generic;
class ScribanDemo
{
public void RenderSimpleText()
{
string text = "Hello, {{name}} ";
// 先解析
var tpl = Template.Parse(text);
// 后渲染
var res1 = tpl.Render(new { name = "catcher wong" });
Console.WriteLine(res1);
var res2 = tpl.Render(new { Name = "Catcher Wong" });
Console.WriteLine(res2);
}
public void RenderObject()
{
string text = @"Hello {{model.name}}, your orders' information are as follow,
you have {{model.orders | array.size }} orders
{{ for order in model.orders }}
{{order.id}}-{{order.amount}}
{{ end }}
";
var tpl = Template.Parse(text);
var res1 = tpl.Render(new
{
model = new ObjModel
{
Name = "Catcher Wong",
Orders = new List<ObjModel.Order>
{
new ObjModel.Order { Id = 1, Amount = 100 },
new ObjModel.Order { Id = 2, Amount = 300 }
}
}
});
Console.WriteLine(res1);
}
}
结果大概如下
Hello, catcher wong
Hello, Catcher Wong
Hello Catcher Wong, your orders' information are as follow,
you have 2 orders
1-100
2-300
总结
再来看看下面两个模版
【{0}】您已成功支付,订单号为{1},支付金额为{2}
【{{name}}】您已成功支付,订单号为{{orderno}},支付金额为{{amount}}
可能会发现,第二个明显比第一个清晰易懂。
第一个如果把几个数字的顺序搞错了,那个输出的结果可能就牛头不对马嘴了。
除了Scriban,还有Fluid也是挺不错的,不过就使用感觉上,个人还是偏向Scriban。
用Scriban进行模版解析的更多相关文章
- js模版解析
function JzRender(tpl, data) { // 模版解析 data是对象则返回字符串,是数组则返回字符串数组 if (data instanceof Array) { var s ...
- 自己用的框架写了一个PHP模版解析类
<?php if(!defined('IS_HEARTPHP')) exit('Access Denied'); /** * template.class.php 模板解析类 * * @copy ...
- 使用localstorage及js模版引擎 开发 m站设想
目前 m站开发的方式,依然请求完整的html,这样造成的问题就是每次请求的数据量过大过多,在没有wifi的情况下,导致页面打开的速度很慢,耗费的流量也较多:访问m站的多是移动端设备,其浏览器的版本都较 ...
- sqler sql 转rest api 源码解析(一)应用的启动入口
sqler sql 转rest api 的源码还是比较简单的,没有比较复杂的设计,大部分都是基于开源 模块实现的. 说明: 当前的版本为2.0,代码使用go mod 进行包管理,如果本地运行注意gol ...
- 深入浅出 Vue.js 第九章 解析器---学习笔记
本文结合 Vue 源码进行学习 学习时,根据 github 上 Vue 项目的 package.json 文件,可知版本为 2.6.10 解析器 一.解析器的作用 解析器的作用就是将模版解析成 AST ...
- django 模版标签笔记
一.模板变量笔记:1.在模版中使用变量,需要将变量放到‘{{}}’中.'{{ 变量 }}'2.如果想访问对象的属性,可以通过'对象.属性名'的方式访问3.如果想要访问一个字典的key对应的value, ...
- Spring MVC工作原理及源码解析(四) ViewResolver实现原理及源码解析
0.ViewResolver原理介绍 根据视图的名称将其解析为 View 类型的视图,如通过 ModelAndView 中的视图名称将其解析成 View,View 是用来渲染页面的,也就是将 Mode ...
- Vue 源码解读(8)—— 编译器 之 解析(上)
特殊说明 由于文章篇幅限制,所以将 Vue 源码解读(8)-- 编译器 之 解析 拆成了上下两篇,所以在阅读本篇文章时请同时打开 Vue 源码解读(8)-- 编译器 之 解析(下)一起阅读. 前言 V ...
- Vue 源码解读(8)—— 编译器 之 解析(下)
特殊说明 由于文章篇幅限制,所以将 Vue 源码解读(8)-- 编译器 之 解析 拆成了两篇文章,本篇是对 Vue 源码解读(8)-- 编译器 之 解析(上) 的一个补充,所以在阅读时请同时打开 Vu ...
随机推荐
- python之字符串的拼接总结
加号连接 1.通过+号连接起来 逗号连接 2.通过都好连接起来 但是,这里值得注意的是,只能用于print打印,赋值组操作会生成元组 直接连接 3.直接连接中间有无空格均可 %连接 在python2. ...
- thinkphp5.0学习笔记
2019-11-11学习笔记 安装TP5.0 a)源代码包下载 在thinkphp官网下载(www.thinkphp.cn)下载 完整版本的TP5.0 b) composer 安装 切换到网站的根目录 ...
- Jquery中的done() fail() then() $when()到底是什么
ajax的传统写法: $.ajax({ url: "test.html", success: function(){ alert("哈哈,成功了!"); }, ...
- node-express脚手架生成的项目中实现浏览器缓存
前言: 最近在做基于 node-express 的个人站点 朵朵视野 ,在站点发布之后自己在访问测试的过程中发现站点是没有缓存机制的,这样就导致每次访问站点都需要重新去加载资源,很消耗资源以及用户体验 ...
- 【转载】从使用到原理学习Java线程池
线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收. 所 ...
- Thymeleaf对象的使用:数字对象
Thymeleaf主要使用 org.thymeleaf.expression.Numbers 类处理数字,在模板中使用 #numbers 对象来处理数字. 开发环境:IntelliJ IDEA 201 ...
- ORACLE关于日志文件基本操作
1.查询系统使用的是哪一组日志文件:SELECT * FROM V$LOG; 2.查询正在使用的组所对应的日志文件:SELECT * FROM V$LOGFILE; 3.强制日志切换:ALTER SY ...
- MySql 筛选条件、聚合分组、连接查询
筛选条件 比较运算符 等于: = ( 注意!不是 == ) 不等于: != 或 <> 大于: > 大于等于: >= 小于: < 小于等于: <= IS NULL I ...
- pip 查看软件包 可用版本并安装; pip 查看 numpy 可用版本并安装
最近需要安装 numpy 的旧版本,发现不知道如何查看可以安装旧版本,解决方法在此进行记录: 然后找到你对应的版本进行安装就可以了: 保持更新,更多精彩内容,请关注 cnblogs.com/xuyao ...
- CentOS安装docker-compose
一.compose简介 compose是一个定义和运行多容器的docker应用的工具.compose 通过yaml文件配置应用服务,然后仅需一个命令就可以创建和运行所有配置中的服务. 二.compos ...