利用模板生成html页面(NVelocity)
公司的网站需要有些新闻,每次的新闻格式都是一样的,而不想每次都查询操作,所以想把这些新闻的页面保存成静态的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>// :: 新闻</title>
</head>
<body>
<h3>// :: 新闻</h3>
<div>
<span>新闻的描述信息</span>
</div>
<div>
新闻的详细内容
</div>
</body>
</html>
总结
NVelocity可以应用在很多地方,不仅仅局限于生成html页,也可以是邮件模板等。
利用模板生成html页面(NVelocity)的更多相关文章
- Java利用模板生成pdf并导出
1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...
- itextsharp利用模板生成pdf文件笔记
iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件. 中文参考网站:http://hardrock.cnblogs.com/ http://pdfhome.hope.com ...
- Java读取根据HTML模板生成HTML页面
首先,我们需要一个html模板: <html> <head> <title>###title###</title> <meta http-equi ...
- html模板生成静态页面及模板分页处理
它只让你修改页面的某一部分,当然这"某一部分"是由你来确定的.美工先做好一个页面,然后我们把这个页面当作模板(要注意的是这个模板就没必要使用EditRegion3这样的代码了,这种 ...
- SpringBoot 利用freemaker生成静态页面
1. <!-- freemarker模板 --> <dependency> <groupId>org.springframework.boot</groupI ...
- 利用js生成读取页面数据并导出为excel
//核心,js部分 */var navs = new Vue({ el: '#navs', data: { navs: [] }, ready: function () { this.$http.ge ...
- html-webpack-plugin插件 根据模板生成多页面
1.项目目录结构为: 2.webpack.config.js配置文件为: var htmlWebpackPlugin = require('html-webpack-plugin'); module. ...
- 浅谈php生成静态页面
一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...
- PHP生成静态页面的方法
在PHP网站开发中为了网站推广和SEO等需要,需要对网站进行全站或局部静态化处理,PHP生成静态HTML页面有多种方法,比如利用PHP模板.缓存 等实现页面静态化,今天就以PHP实例教程形 ...
随机推荐
- 消息驱动式微服务:Spring Cloud Stream & RabbitMQ
1. 概述 在本文中,我们将向您介绍Spring Cloud Stream,这是一个用于构建消息驱动的微服务应用程序的框架,这些应用程序由一个常见的消息传递代理(如RabbitMQ.Apache Ka ...
- leadcode的Hot100系列--617. 合并二叉树
合并,就是两个树的结构交集部分,数据相加,否则,取非空部分. 所以,这里相当于是对两棵树同时遍历: 如果两棵树节点都不为空,则数据相加, 否则,直接指针把不为空的节点复制过来. 注:这里没有申请内存, ...
- HDU 1542:Atlantis(扫描线+线段树 矩形面积并)***
题目链接 题意 给出n个矩形,求面积并. 思路 使用扫描线,我这里离散化y轴,按照x坐标从左往右扫过去.离散化后的y轴可以用线段树维护整个y上面的线段总长度,当碰到扫描线的时候,就可以统计面积.这里要 ...
- django的命令, 配置,以及django使用mysql的流程
1.Django的命令: 下载 pip install django==1.11.16 pip install django==1.11.16 -i 源 创建项目 django-admin start ...
- 修改SearchBar的取消按钮Cancel为中文
一开始在网上看到很多方法都是循环,好吧,我也循环 创建UISearchBar的时候循环,不行 用searchBarTextDidBeginEditing事件去循环,也不行 无语了,搜索了Baidu第一 ...
- F#周报2019年第28期
新闻 FableConf门票开始贩售 Bolero的HTML模板支持热加载 Bolero从v0.4到v0.5的升级指南 完整的SAFE-Chat迁移至了Fable 2 为纯函数式3D图形生成领域专用语 ...
- Java 集合类Hashmap
一.HashMap 简介 HashMap在程序员的开发过程中是一个十分常用的集合类,它是一个以键值对形式存在的集合类, 在开发中我们可以利用的它的一个key存在即替换的特性,实现一个更新的去重的操作. ...
- 走近Java之HashMap In JDK8
HashMap,继承AbstractMap类,实现了Map接口,特性是无序不可重复,其本身的数据结构是数组加链表和红黑树.今天我们就一起来详细了解一下. 首先,需要知道,HashMap中几个关键词的含 ...
- NOIP最后阶段每日小记
前言:最后几天了,记录一下每天的经验.教训.启示.大牛路过请补充一点内容…… 2017-10-31 21:32 今天考试打完第一题就知道是AK场,然后就死命搞题,结果第一题手贱多打了一个%,本机无显示 ...
- Spring Boot 2.x (十八):邮件服务一文打尽
前景介绍 在日常的工作中,我们经常会用到邮件服务,比如发送验证码,找回密码确认,注册时邮件验证等,所以今天在这里进行邮件服务的一些操作. 大致思路 我们要做的其实就是把Java程序作为一个客户端,然后 ...