开发者社区> 陈惊蛰> 正文

用Razor做静态页面生成器

简介: 本来是用asp.net webpages做的博客网站,数据库用了一个陌生的本地数据库,只是觉得用起来很爽快,用新鲜的东西有一种刺激。后来数据库挂了,估计是存某个字段的时候出了问题,可是新鲜的东西,也不知道用什么工具可以查,只好怪自己太年轻。
+关注继续查看

本来是用asp.net webpages做的博客网站,数据库用了一个陌生的本地数据库,只是觉得用起来很爽快,用新鲜的东西有一种刺激。后来数据库挂了,估计是存某个字段的时候出了问题,可是新鲜的东西,也不知道用什么工具可以查,只好怪自己太年轻。费了一番力气,总算是把数据挽救回来,突然意识到阿里云那边又快到期了。

不打算续租了,备案又麻烦,干脆就改成静态,挂GitHub吧。

关于GitHub上建站的方法直接看这里 https://pages.github.com/

建完之后设置CNAME和A Record绑定好域名。

之后就可以用Git来上传页面了,还可以使用Jekyll来制作博客。但是我是不懂那些的,技能树点的不一样,也懒得为了一个博客去学另一颗树上的东西。

追溯当时用webpages的原因,其实也是因为Razor,所以计划落定,用Razor做模版,Markdown做博文编辑,最后生成html。还需要把博文记录下来,随便用什么都可以,就直接存本地文件了,换言之这文件就成了我网站的数据库,为了以后检查方便就用文本文件。

1、Razor模板

2、Markdown编辑

3、Json存档

这样定好之后,创建解决方案,WPF项目模板,NuGet添加RazorEngine、MarkdownSharp、NewtonsoftJson,创建一个窗体,Page导航,两个Page,分别是目录页和内容页。

目录页是一个ListView,列出所有的文章,创建Article类,有属性Title, Content, Author, Time, Description, Link。Link是生成之后的存放的静态页面的路径,可以带/符号。

目录页上可以新建和删除文章,右下角是导出按钮,点击生成整站的页面。因为是博客站,所以肯定有两类页面,也是目录页和博文内容页。目录页是根路径下的index.html, 内容页将依据编辑时候录入的Link属性,生成对应的路径,并在改路径下创建index.html,于是你访问的时候可以是这个样子http://localhost/2015/1/1/link/

双击ListViewItem,也就是其中一篇文章,Page Navigate到内容页,在内容页你可以编辑文章,左边是编辑界面右边是预览界面。编辑采用Markdown语法。

Save保存,Back按钮导航回上一页。

这里我在Save的时候会序列化成JSON写入本地文件,需要妥善保存此文件。

在目录页进行导出操作的时候,会读取模板文件,模板文件有两个,请看下图

编译后使用的时候需要确保Template目录下有这两个文件。后缀是cshtml,虽然可以是任意后缀,但cshtml能得到vs编辑器的帮助,模板中使用razor语法调用@Model中的属性,自定义前端标签来进行布局。在Index.cshtml中,Model就是List<Article>,在Detail.cshtml中,Model是Article。

以文章页面的导出为例,关键代码如下:

Markdown mk = new Markdown();
string content = mk.Transform(article.Content);//markdown转换html
var model = new
{
ID
= article.ID, Title = article.Title, Content = content, Link = article.Link, WriteTime = article.WriteTime, Description = article.Description, Author = article.Author, }; string text = Engine.Razor.RunCompile(WebSource.Instance.DetailTemplate, "templateDetail", null, model);//razor转换html string outputFilePath = string.Format("{0}/output/{1}", AppDomain.CurrentDomain.BaseDirectory, article.Link); Directory.CreateDirectory(outputFilePath);//创建目录 File.WriteAllText(outputFilePath + "/index.html", text);//写入文件

最后生成的整站页面在output目录下。

工具完成,花了一个多小时的时间。嗯,Razor用来做代码生成确实很好使。

下面是第一个试验品

http://ifchen.com/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
幻读是啥,会有什么问题?如何解决?
大家好,我是Leo,上篇文章大概介绍了为什么查询一条记录性能慢的原因。今天我们介绍一下幻读的一些相关知识,以及幻读相关的间隙锁,间隙锁死锁的解决方案。
5 0
MySQL有哪些提升性能的方法呢?
大家好,前面几章我们介绍了关于锁的规则优化问题。今天我们介绍一下MySQL的那些提升性能的方法?
5 0
面试高频:MySQL是如何保证主从库数据一致性的?
大家好,我是Leo。前面文章我们介绍了WAL的安全机制。可以保证数据的安全性。通过安全性我们分析了binlog,redolog日志的写入机制。今天我们分析一下主从库的实现原理!MySQL是如何保证主从库的数据是一致的呢?
5 0
面试高频:MySQL是怎么保证高可用的?
大家好,我是Leo,从事Java后端开发。之前的文章大概介绍了主从库的数据一致性问题,通过分析binlog的三种格式的优缺点以及应用性效率。介绍了主从同步的循环复制问题以及解决方案。。今天这里主要介绍一下MySQL高可用这一块的知识。
5 0
浅入浅出代理模式与Spring事务管理 下
浅入浅出代理模式与Spring事务管理
5 0
欢迎来到 WebGPU 的世界 上
欢迎来到 WebGPU 的世界
5 0
欢迎来到 WebGPU 的世界 下
欢迎来到 WebGPU 的世界
5 0
“1s? 我要0s” -- 阿里云安全产品1秒战役总结
“1s? 我要0s” -- 阿里云安全产品1秒战役总结
5 0
RISC-V大赛开发套件详解(二):D1哪吒开发板Yocto介绍
RISC-V大赛开发套件详解(二):D1哪吒开发板Yocto介绍
7 0
用IntelliJ IDEA ULTIMATE版看Java类图
看代码的遇见子类或者接口的实现时,如果有个类图工具就能让我们层次和关系一目了然,如果您的IDE是IntelliJ IDEA ULTIMATE版,推荐使用其自带的类图功能
4 0
+关注
陈惊蛰
从业7年, 参与过几款市场反应不太好的游戏开发, 主要领域为服务端, 酷爱.net语言
33
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载