前言

有些时候,我们需要根据模版去展示一些内容,通常会借助模版引擎来处理。

举个简单的例子,发短信。

短信肯定是有模版的,不同的场景对应不同的模版。

注册的,

【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进行模版解析的更多相关文章

  1. js模版解析

    function JzRender(tpl, data) { // 模版解析 data是对象则返回字符串,是数组则返回字符串数组 if (data instanceof Array) { var s ...

  2. 自己用的框架写了一个PHP模版解析类

    <?php if(!defined('IS_HEARTPHP')) exit('Access Denied'); /** * template.class.php 模板解析类 * * @copy ...

  3. 使用localstorage及js模版引擎 开发 m站设想

    目前 m站开发的方式,依然请求完整的html,这样造成的问题就是每次请求的数据量过大过多,在没有wifi的情况下,导致页面打开的速度很慢,耗费的流量也较多:访问m站的多是移动端设备,其浏览器的版本都较 ...

  4. sqler sql 转rest api 源码解析(一)应用的启动入口

    sqler sql 转rest api 的源码还是比较简单的,没有比较复杂的设计,大部分都是基于开源 模块实现的. 说明: 当前的版本为2.0,代码使用go mod 进行包管理,如果本地运行注意gol ...

  5. 深入浅出 Vue.js 第九章 解析器---学习笔记

    本文结合 Vue 源码进行学习 学习时,根据 github 上 Vue 项目的 package.json 文件,可知版本为 2.6.10 解析器 一.解析器的作用 解析器的作用就是将模版解析成 AST ...

  6. django 模版标签笔记

    一.模板变量笔记:1.在模版中使用变量,需要将变量放到‘{{}}’中.'{{ 变量 }}'2.如果想访问对象的属性,可以通过'对象.属性名'的方式访问3.如果想要访问一个字典的key对应的value, ...

  7. Spring MVC工作原理及源码解析(四) ViewResolver实现原理及源码解析

    0.ViewResolver原理介绍 根据视图的名称将其解析为 View 类型的视图,如通过 ModelAndView 中的视图名称将其解析成 View,View 是用来渲染页面的,也就是将 Mode ...

  8. Vue 源码解读(8)—— 编译器 之 解析(上)

    特殊说明 由于文章篇幅限制,所以将 Vue 源码解读(8)-- 编译器 之 解析 拆成了上下两篇,所以在阅读本篇文章时请同时打开 Vue 源码解读(8)-- 编译器 之 解析(下)一起阅读. 前言 V ...

  9. Vue 源码解读(8)—— 编译器 之 解析(下)

    特殊说明 由于文章篇幅限制,所以将 Vue 源码解读(8)-- 编译器 之 解析 拆成了两篇文章,本篇是对 Vue 源码解读(8)-- 编译器 之 解析(上) 的一个补充,所以在阅读时请同时打开 Vu ...

随机推荐

  1. robotframework框架 - 在Pycharm当中编写RobotFramework测试用例

    众所周知,pycharm是个写python极好用的编辑器.也可以装很多的插件来完成各种骚操作. 某一天,心血来潮在pycharm的插件库里,搜索了一下robot,恩,发现有支持robotframewo ...

  2. 如何使用第三方ui库vant-weapp

    如何使用第三方ui库vant-weapp 1==>创建文件夹demo 2==> 在小程序 中打开 注意 要先在小程序中打开 如果要想在小程序的开发工具中打开某一个 文件夹 要么是空文件夹 ...

  3. Rsync常见问题汇总

    rsync服务端开启的iptables防火墙 客户端的错误现象  No route to host 错误演示过程 [root@nfs01 tmp]# rsync -avz /etc/hosts rsy ...

  4. jQuery 源码解析(二十三) DOM操作模块 替换元素 详解

    本节说一下DOM操作模块里的替换元素模块,该模块可将当前匹配的元素替换指定的DOM元素,有两个方法,如下: replaceWith(value)     ;使用提供的新内容来替换匹配元素集合中的每个元 ...

  5. PostgreSQL数据库一些tricks

    PostgreSQL自带Pgadmin客户端,可用于访问本地和远程PG库,一些tricks如下: 1.联合查询 SELECT * FROM table1 INNER JOIN table2 ON ta ...

  6. SpringBoot2.0 整合 Shiro 框架,实现用户权限管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.Shiro简介 1.基础概念 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.作为一款安全 ...

  7. Thinkphp <= 5.0.10 缓存getshell复现

    目录 Thinkphp <= 5.0.10 缓存getshell复现 0x01 poc 0x02 跟踪源码 0x03 审计思路 0x04 补丁 0x05 参考 Thinkphp <= 5. ...

  8. (转)GitHub Desktop 拉取 GitHub上 Tag 版本代码

    转自:GitHub Desktop 拉取 GitHub上 Tag 版本代码 一直在使用 GitHub Desktop 图形化 git 管理工具,统一项目框架版本时需要切换到ThinkPHP Tag 分 ...

  9. iOS事件传递和事件响应者链 20170810

    一.事件响应者链 事件传递和事件响应链 区别 事件的传递和响应的区别: 事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件. 引出 当我们手指触摸屏幕 ...

  10. Java反射03 : 获取Class的注解、修饰符、父类、接口、字段、构造器和方法

    java.lang.Class类提供了获取类的各种信息对象的静态方法. 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79363921 ...