用 orgmode, Nikola 写静态博客

这个坑有点大

现在的问题是代码高亮, 用默认插件每个代码块都要调用一下外部命令 pygmentize,比如我的 org 文件中有 60 多个 ipython 代码块,那么 build 的时候就要调用 60 次 pygmentize,这和 pygmentize 原生支持的 md (只需调用一次)相比,是很大的劣势。每次 build 的时候都要卡半分钟以上证实了这一点。

Hugo 生成的速度很快,试了下一百多篇 Org 格式的文章 生成时间1秒都不到。

支持 Org-table 的格式,还有语法高亮,但目前无法高亮 Ipython。其他的地方还没研究,能凑合的用。

1 个赞

hugo 不会用 pygments 吧?

@stonejiajia org 有没有通用的解析器?Hugo 用啥解析的?

If you for some reason don’t want to use the built-in Chroma highlighter, you can set pygmentsUseClassic=true in your config and add Pygments to your path.

来自 Syntax Highlighting

@et2010 Hugo 自带高亮,也可以用 pygments。链接中也提到了 pygments 慢。

1 个赞

不晓得什么解析器,我只是跟着文档步骤做的,效果还行,只要能用 Org-mode 写作就行。

hugo 的 org 解析器是用 go 语言写的:

应该不能实现 org 的所有功能吧?有什么局限性? @stonejiajia

另一方面,速度肯定比用 emacs orgmode 解析要快不少

  1. 有些主题特地为 Markdown 订制的,用 Org-mode 的话细节上会不一样,比如我没法显示文章目录。

  2. 加载图片有点繁琐。

其他功能没测试,局限性 Issue 上都提到了。

你也可以在本地上试一下,及其方便,几步就完成了。现在已经出现几个 Hugo 的 Emacs 插件了。

1 个赞

那我还是用 Nikola 吧,和 org 裸奔差不多,所以能保证 org 导出的所有选项可用。

Nikola 有没有什么比较好的主题教程?我照着官方教程一步一步来,结果发现不能复现,比较崩溃。

主题开发你通过 nikola auto -b 打开自动刷新,改动一个文件保存一下。还是很快能蒙出哪块对应哪块的。我当时直接复制内置的base 模版文件夹,只把名字改一下。可以保证不出大的错误,然后不断的小块改,最后再把继承关系去掉,就成了不依赖于内置模版,和它们同等地位的主题了。

有几个命名上的坑,比如 listings.tmpl 是代码页及其下级页的模版,list.tmpl 是存档页模版,list-post.tmpl 是存档页下级页的模板。其它模版名称对应关系就一目了然了。推荐你直接在我的 Dawning 模板上改,我的模版其他页面全部从 base.tmpl 继承,内置的则有的是从 base.tmpl 继承,有的从 page.tmpl 继承,还有历史残余根本就用不着的 story.tmpl对了,模板名称不要改,被作者写死了的。

至于官方教程,用的是 Mako 模版,我用的是 Jinja2,两者其实差别不大。如果对模版语法不了解,自己去扫下任何一个的手册。官方教程作为参考,了解大概流程就行,灵活一点不要全部照搬着来。

1 个赞

我想做成类似这种效果的:

http://cse3521.artifice.cc/k-means.html

不知道难度有多大

为什么选 Jinja2不选Mako

要想完成类似上面链接的效果,用 Jinja2 和 Mako 有区别吗?

好吧,我刚才 Google 了一把,看来 Jinja2 用的人更多

toc 不太好办,大部分博客都是通过 javascript 搞的。只用提取 “h1, h2 …” 这些标签,不过我 javascript 毕竟涉及函数啊、DOM 操作啊等等,这个可不像 html/css 现用现查,有空再学再抄吧。

另外注意一点的是:不同页面的 API 值是不一样的,这些值也不是全局可以访问的。比如 posts 在首页和档案页可能 API 都同样叫 posts,但内部值是不同的。这个还算容易理解?在 tags 概览页不存在 posts,必须得到 tag 详情页才能看到 posts

我当时是两个都大概看了下,觉得 Jinja2 的语法基本一看就知道啥意思,而且知名度也高点。

两者其实差别不大。写主题时只用了三个特性:

  1. 模板继承。Jinja2 是 extend,Mako 是 inherit。
  2. 宏。其实就是函数块,Jinja2 是 macro,Mako 是 def。如要在别的文件里用,首行 import 一下。
  3. 管道。可以对内容进行简单处理,Jinja2 是 title|capitize 这种(首字母大写),Mako 叫 filter,用法自己翻下手册。

至于 if/else/for 这些基本没差别吧。

1 个赞

多谢指点,虽然我还是不太明白 :joy:

还有就是你用的 python 版本是什么?我这里帖子无法加密呢。我用的 python 3.6.1

根据你的回复,我已经大致有了方向:

  • 继承 base-jinja2 模板
  • 对模板进行微调,用 nikola auto -b 预览
  • 想到再写 。。。

模版语言基本差不多,如果你用 Hugo 它的模版语言,和上面我说的也差不了多少。看下别人的例子怎么用的,就能很快理解了。静态博客总共才 7、8 个简单页面,还算好阅读。

我的 python 是 3.6.2,不过感觉关系不大。你试过 markdown/reST 加密了没?

我记得试过了也不行,等下再试试

嗯。有问题再讨论吧。

我试了一下,发现如果帖子中包含中文,那么就无法加密

刚试了一下,有中文确实无法加密。

快速搜了一下,貌似 rc4 的加密都是面向英文的?不太能立马解决的样子。

换了几个模板下来,发现 jidn 主题可能是最容易加入自定义配置的,模板写的比较完善,也不算太复杂。

另外新手还是建议直接上 mako 模板吧,网上 nikola 的模板中以用 mako 的居多,教程也基于 mako,容易上手。

mako 还支持 python 代码,不明白咋就没有 jinja2 用的人多呢?

嗯,这个看情况。觉得哪个适合自己就用哪个。

Mako 我没特别仔细看过(Jinja2 也没有),因为 Nikola 主题使用的模版特性很少,够用就好。