公司的网站需要有些新闻, 每次的新闻格式都是一样的, 而不想每次都查询操作, 所以想把这些新闻的页面保存成静态的 html, 之后搜索了下就找到了这个模板引擎, 当然其他的模板引擎可以的, 例如: Razor, 自己写的手动替换等. NVelocity 是 Apache Jakarta Velocity 中的一个优秀项目, 有 java 版的 (Velocity),.NET 版 (NVelocity), 它是非常简单, 易于学习和可扩展的模板引擎, 并且支持. NET Core.
在 NVelocity 中对变量的引用都是以 $ 开头, 加上变量名称, 当使用 ! 时表示为空字符串, 语法都是 #开头.
语法
1. 赋值指令 #set
#set($book.title="test")
2. 条件指令 #if if/elseif/else
- #if($books.Total>1)
- $books.Total
- #else
没有数据
#end
3. 循环指令 #foreach
- #foreach($book in $books)
- $book.Title
- #end
高级 foreach
- #foreach($i in $items)
- #each
每次 [循环] 显示的文本
#before
每次 [循环前] 显示的文本
#after
每次 [循环后] 显示的文本
#between
每 [两次] [循环] 显示的文本
#odd
奇数显示
#even
偶数显示
#nodata
空或者没有数据
#beforeall
循环之前显示
#afterall
循环之后显示
#end
4. 引用静态资源指令 #include
#include('jquery.js') 会把当前 JS 当作当前流插入到内容中
5. 引用并解析资源指令 #parse
#parse('temo.js');
与 #include 不同的是, 假如 temp.JS 中有 NVelocity 的指令, 变量进行处理, 并把结果插入到当前流中;
6. 双数执行 #even odd
- #foreach(book in $books)
- #even
- <p > 双行:$book.Title</p>
- #odd
- <p > 单行:$book.Title</p>
- #end
7. 关系运算符
AND,OR 和 NOT 操作符, 分别对应 &&,|| 和!
- #if($foo && $bar)
- #end
- C# 例子
1.Nuget 中引用 NVelocity
2. 编写模板页 (Hellovelocity.vm, 也可以是 Hellovelocity.HTML 等任意的名称后缀)
- <!DOCTYPE HTML>
- <HTML lang="en" xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf-8" />
- <title>
- $news.Title
- </title>
- </head>
- <body>
- <h3>
- $news.Title
- </h3>
- <div>
- <span>
- $news.Desc
- </span>
- </div>
- <div>
- $news.Content
- </div>
- </body>
- </HTML>
3. 编写后台程序
- public static string TransformBooksToHtml(News news, string resourceTemplateName)
- {
- // 初始化模板引擎
- VelocityEngine ve = new VelocityEngine();
- ve.Init();
- // 获取模板文件
- Template t = ve.GetTemplate(resourceTemplateName);
- // 设置变量
- VelocityContext ctx = new VelocityContext();
- ctx.Put("news", news);
- // 输出
- StringWriter sw = new StringWriter();
- t.Merge(ctx, sw);
- string message = sw.ToString();
- sw.Dispose();
- File.WriteAllText($@"{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}.html", sw.ToString());// 生成文件的路径可以自由选择
- return message;
- }
4. 程序调用
- News news = new News() {
- Title = $"{DateTime.Now} 新闻", Desc = "新闻的描述信息", Content = "新闻的详细内容", CreateTime = DateTime.Now
- };
- Console.WriteLine(MyNVelocity.TransformBooksToHtml(news, @"/NVelocityTest/Hellovelocity.html"));// 这里的模板路径是 NVelocityTest 目录下的, 可以任意
5. 查看生成的文件
- <!DOCTYPE HTML>
- <HTML lang="en" xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf-8" />
- <title>2019/08/05 14:20:14 新闻 </title>
- </head>
- <body>
- <h3>2019/08/05 14:20:14 新闻 </h3>
- <div>
- <span > 新闻的描述信息 </span>
- </div>
- <div>
新闻的详细内容
- </div>
- </body>
- </HTML>
总结
NVelocity 可以应用在很多地方, 不仅仅局限于生成 HTML 页, 也可以是邮件模板等.
来源: https://www.cnblogs.com/zhao123/p/11302872.html