.net 开源模板引擎jntemplate 教程:基础篇之语法

1、基本概念

上一篇咱们简单的介绍了jntemplate并写了一个hello world(若是没有看过的,点击查看),本文将继续介绍jntemplate的模板语法。html

咱们在讲解语法前,首先要了解一下标签的概念。在jntemplate中,标签特指用来包含模板代码的语法块,它是基本的呈现单元,在模板解析完成后,该语法块将会被替换成具体的数据或者内容。git

标签一般使用${开头,而且以}结尾,绝大部分标签能够省略大括号进行简写,如${model.UserName} 能够简写为 $model.UserNamegithub

下面将重点介绍几个经常使用的语法标签:c#

注意:标签的符号是能够自定义的,好比你能够自定义为{{model.UserName}} 或者@{model.UserName},本文为了方便讲解,仅以默认配置为准。数组

2、变量

用法:用于在模板中输出一个变量,该变量能够是任何对象。如:${var},能够简写为$var,其中var 为变量名,变量名只能是字母,下划线与数字的组合,且必须以字母开头。mvc

例:asp.net

var template = Engine.CreateTemplate("<h1>$title</h1>!");
template.Set("title", "jntemplate");
template.Render(Console.Out);

3、属性与字段

用法: 用于访问对象属性或者字段,用法与c#相似,字段与属性必须是公开的(public),v2.0.0 中暂时不支持匿名对象的访问。如:${model.Name},能够简写为$model.Name.函数

例一:spa

var template = Engine.CreateTemplate("<h1>$model.Title</h1>!");
template.Set("model", new Site{ Title="jntemplate" });
template.Render(Console.Out);

若是访问静态属性或字段,须要经过template.SetStaticType(...)来指定静态对象类型。.net

例二:

var templateContent = "${DateTime.Now}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("DateTime", typeof(DateTime));
template.Render(Console.Out);

! 注意:当前版本暂时不支持匿名对象访问。

4、索引

用法:用于访问数组或者IList<T>及其它支持索引的对象,用法与c#相似,如${arr[1]}

例:

var template = Engine.CreateTemplate("${arr[0]}");
template.SetStaticType("arr", new int[]{ 1,2,3});
template.Render(Console.Out);

5、函数方法

用法:用于调用对象实例方法,静态方法,或者委托。如:${func(p1,p2....) },能够简写为$func(p1,p2....)

注意:方法必须是公开的(public),若是是私有的(private)则没法访问。

例一(实例方法):

Class1类

public class Class1
{
    public int Add(int a,int b)
    {
        return a+b; 
    }
}

模板代码:

var template = Engine.CreateTemplate("$obj.Add(1,2)");
template.Set("obj", new Class1());
template.Render(Console.Out);

例二(静态方法):

var templateContent = "${string.Concat(\"str1\",\"str2\")}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("string", typeof(string));
template.Render(Console.Out);

例三(委托方法):

var template = Engine.CreateTemplate("$add(8,-2)");
template.Set<Func<int, int, int>>("add", (x, y) =>
{
    return x + y;
});
template.Render(Console.Out);

6、逻辑判断(IF)

用法:用于处理代码逻辑,等同于c#里面的ifelse if ,支持如下逻辑运算符:大于(>)小于(<)大于等于(>=)小于等于(<=)等于(==)不等于(!=)或者(||)而且(&&)

例一:

模板:demo.html

<span>
$if(id>0)
     编号大于零
$elif(id==0)
    编号等于零
$else
    编号小于零
$end
</span>

后台代码:

var template = Engine.LoadTemplate(@"c:\demo.html");
template.Set("id",15);
template.Render(Console.Out);

注意:else if 能够写做$elseif 也能够写做 $elif。标签必须以$end结束

7、列表迭代(Foreach)

用法:用来遍历输出一个列表,等同于c#foreach,目标能够是数组或者实现了IEnumerable 接口的任意对象.

例一:

模板:demo.html

$foreach(model in list)
<ul>
 <li><a href="${model.Url}">${model.Title}</a></li></li>
</ul>
$end
var template = Engine.LoadTemplate(@"c:\demo.html");
template.Set("list",new NewInfo[]{ ... });
template.Render(Console.Out);

$foreach(model in list) 也能够写做 $for(model in list) ,必须使用$end 结束标签。

8、模板引用

用法:用于引用某一个公共模板,有二种写法$load("路径")$inclub("路径"):

  • load 引用并解析模板
  • inclub:引用模板(不解析),适用于不须要解析的文件,好比JS,CSS等

例:

$load("public/header.html")
<div>这是内容</div>

9、总结

本文介绍了jntemplate经常使用的模板语法,包括变量,属性,方法,逻辑判断,迭代与模板引用这几大块,只要灵活组合使用,彻底能够知足平常开发了。

部分不怎么经常使用的语法你们能够自行能够参考官方文档。

下一节,咱们将介绍如何在asp.net mvc中使用jntemplate。

目录:

  1. .net 开源模板引擎jntemplate 教程:基础篇之入门
  2. .net 开源模板引擎jntemplate 教程:基础篇之语法

所有章节写完后,会再补齐所有目录

jntemplate源码下载