.net 開源模板引擎jntemplate 教程:基礎篇之語法

翅膀的初衷發表於2021-03-04

一、基本概念

上一篇我們簡單的介紹了jntemplate並寫了一個hello world(如果沒有看過的,點選檢視),本文將繼續介紹jntemplate的模板語法。

我們在講解語法前,首先要了解一下標籤的概念。在jntemplate中,標籤特指用來包含模板程式碼的語法塊,它是基本的呈現單元,在模板解析完成後,該語法塊將會被替換成具體的資料或者內容。

標籤通常使用${開頭,並且以}結尾,絕大部分標籤可以省略大括號進行簡寫,如${model.UserName} 可以簡寫為 $model.UserName

下面將重點介紹幾個常用的語法標籤:

注意:標籤的符號是可以自定義的,比如你可以自定義為{{model.UserName}} 或者@{model.UserName},本文為了方便講解,僅以預設配置為準。

二、變數

用法:用於在模板中輸出一個變數,該變數可以是任何物件。如:${var},可以簡寫為$var,其中var 為變數名,變數名只能是字母,下劃線與數字的組合,且必須以字母開頭。

例:

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

三、屬性與欄位

用法: 用於訪問物件屬性或者欄位,用法與c#類似,欄位與屬性必須是公開的(public),v2.0.0 中暫時不支援匿名物件的訪問。如:${model.Name},可以簡寫為$model.Name.

例一:

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

如果訪問靜態屬性或欄位,需要通過template.SetStaticType(...)來指定靜態物件型別。

例二:

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

! 注意:當前版本暫時不支援匿名物件訪問。

四、索引

用法:用於訪問陣列或者IList<T>及其它支援索引的物件,用法與c#類似,如${arr[1]}

例:

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

五、函式方法

用法:用於呼叫物件例項方法,靜態方法,或者委託。如:${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);

六、邏輯判斷(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結束

七、列表迭代(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 結束標籤。

八、模板引用

用法:用於引用某一個公共模板,有二種寫法$load("路徑")$inclub("路徑"):

  • load 引用並解析模板
  • inclub:引用模板(不解析),適用於不需要解析的檔案,比如JS,CSS等

例:

$load("public/header.html")
<div>這是內容</div>

九、總結

本文介紹了jntemplate常用的模板語法,包括變數,屬性,方法,邏輯判斷,迭代與模板引用這幾大塊,只要靈活組合使用,完全可以滿足日常開發了。

部分不怎麼常用的語法大家可以自行可以參考官方文件。

下一節,我們將介紹如何在asp.net mvc中使用jntemplate。

目錄:

  1. .net 開源模板引擎jntemplate 教程:基礎篇之入門
  2. .net 開源模板引擎jntemplate 教程:基礎篇之語法

全部章節寫完後,會再補齊全部目錄

jntemplate原始碼下載

相關文章