← 首页

几十行 Python 写一个 Markdown 转静态站生成器

2026-03-20

很多人以为静态站点生成器(Hugo、Jekyll、Hexo)很复杂。其实剥掉所有花活,核心逻辑不到五十行。

它能做什么

给定一堆 .md 文件,输出:

关键就这么几步

import markdown, glob, os

for path in glob.glob("posts/*.md"):
    text = open(path, encoding="utf-8").read()
    body = markdown.markdown(text, extensions=["extra", "fenced_code", "tables"])
    # 套模板、写文件

markdown 库一个调用就把 Markdown 渲染成 HTML,extra 扩展支持表格,fenced_code 支持围栏代码块。剩下的无非是拼字符串和写文件。

元信息怎么来

我特意没用复杂的 YAML 解析库,只正则匹配文件头一段 --- 包裹的内容:

m = re.match(r"^---\s*\n(.*?)\n---\s*\n?", text, re.DOTALL)

拿不到就退化:标题用文件名,日期用文件修改时间。够用就好。

做工具最怕一开始就想「万一来个奇怪的需求怎么办」。先让它跑起来,缺什么再加,比一开始就设计过度要省心得多。