您现在的位置是:网站首页> .NET Core

net core 模版引擎JNTemplate

摘要

一、新建项目:JNTemplateDemo


  <ItemGroup>

    <PackageReference Include="JinianNet.JNTemplate" Version="2.2.2" />

  </ItemGroup>

二、Program.cs


using JinianNet.JNTemplate;

using System;

 

namespace JNTemplateDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            var templateContent = "$fun.Test(\"your input\") $name";

            var template = Engine.CreateTemplate(templateContent);

            template.Set("fun", new TestHelper());

            template.Set("name", "jntemplate");

            var result = template.Render();

            Console.WriteLine(result);

 

            Console.ReadKey();

        }

    }

    public class TestHelper

    {

        public string Test(string val)

        {

            return $"Good! {val}";

        }

    }

}

1.变量:

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

例:

var template = Engine.CreateTemplate("$title!");

template.Set("title", "jntemplate");

template.Render(Console.Out);


2.属性与字段

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

例一:

var template = Engine.CreateTemplate("$model.Title!");

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);


3.索引

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

例:

var template = Engine.CreateTemplate("${arr[0]}");

template.SetStaticType("arr", new int[]{ 1,2,3});

template.Render(Console.Out);


4.函数方法

用法:用于调用对象实例方法,静态方法,或者委托。如:${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>("add", (x, y) =>

{

    return x + y;

});

template.Render(Console.Out);



5.逻辑判断(IF)

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

例一:

模板:demo.html

$if(id>0)

     编号大于零

$elif(id==0)

    编号等于零

$else

    编号小于零

$end


后台代码:

var template = Engine.LoadTemplate(@"c:\demo.html");

template.Set("id",15);

template.Render(Console.Out);

注意:else if 可以写作$elseif 也可以写作 $elif。标签必须以$end结束


6、列表迭代(Foreach)

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

例一:

模板:demo.html

$foreach(model in list)${model.Title}$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 结束标签。


7、模板引用

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

load 引用并解析模板

inclub:引用模板(不解析),适用于不需要解析的文件,比如JS,CSS等

例:

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


8、总结

本文介绍了jntemplate常用的模板语法,包括变量,属性,方法,逻辑判断,迭代与模板引用这几大块,只要灵活组合使用,完全可以满足日常开发了。


部分不怎么常用的语法大家可以自行可以参考官方文档。


Top