py2htmlblog:把 Markdown 变成博客,就这么简单

这是什么

py2htmlblog 是一个 Python 写的静态博客生成器。给它 Markdown 文章、分类信息和一个 HTML 模板,它就能生成一个完整的静态网站,丢到任何地方都能跑——GitHub Pages、虚拟主机、对象存储,甚至 U 盘。

它模仿了老牌博客工具 ThingamaBlog 的设计理念(模板 + 数据 = 静态页面),但用 Python 重写,去掉了对 Java 的依赖,并加入了现代博客需要的所有功能。

能做什么

  • 写文章:用 Markdown 写,带 frontmatter 元数据。格式简洁,任何编辑器都能打开
  • 自动构建:一键生成完整的静态站点,首页、归档、分类、文章页、RSS、sitemap 全搞定
  • 多套模板:内置 19 套主题模板,包括从 WordPress 移植的 iNove 经典主题和 17 套 ThingamaBlog 原装模板
  • URL 兼容:生成的 URL 与 ThingamaBlog 完全一致(archives/2014/03/entry_1.html),迁移老博客不会丢搜索引擎索引
  • 多种发布方式:FTP、SFTP、Git 推送,一条命令部署到任何地方
  • GUI 界面:PyQt 写的桌面编辑器,实时 Markdown 预览,不用碰命令行也能写博客
  • ZIP 模板包:模板可以打包成 ZIP,系统自动加载,方便分发和分享

为什么又造一个轮子

ThingamaBlog 是个很好的工具,但它依赖 Java 运行环境,模板语法也相对封闭。当博客从 Windows 迁移到 GitHub Pages 后,每次更新都要手动编辑 HTML,很不方便。

py2htmlblog 的目标就是:保留 ThingamaBlog 的优点(模板分离、静态生成、URL 稳定),同时用 Python 让它更轻便、更开放、更现代化。

技术栈

组件 技术
语言 Python 3
模板引擎 自研(类似 Jinja2 语法)
Markdown 自研解析器(支持中文)
GUI PyQt5
部署 FTP / SFTP / Git

项目结构一览

python-main/
├── data/                  # 所有数据
│   ├── info.json          # 站点配置
│   ├── category.json      # 分类列表
│   ├── links.json         # 友链列表
│   └── post/              # 文章(Markdown + frontmatter)
├── templates/             # 19 套主题模板
│   ├── default/           # 默认主题
│   ├── inove/             # iNove 1.2.3(WordPress 移植)
│   └── ...                # 17 套 ThingamaBlog 原装模板
├── mdblog/                # 待发布文章目录
├── wwwroot/               # 生成后的静态站点(直接部署)
├── main.py                # 命令行入口
├── publish.py             # 站点生成器
├── deploy.py              # 发布模块(FTP/SFTP/Git)
├── convert_thingama_templates.py  # 模板转换工具
└── gui.py                 # PyQt 桌面编辑器

和同类工具的区别

特性 py2htmlblog Hugo Jekyll Hexo
语言 Python Go Ruby Node.js
模板兼容 ThingamaBlog ✅ ❌ ❌ ❌
内置 FTP/SFTP 发布 ✅ ❌ ❌ ❌
ZIP 模板包 ✅ ❌ ❌ ❌
桌面 GUI 编辑器 ✅ ❌ ❌ ❌
URL 迁移兼容 ✅ ⚠️ ⚠️ ⚠️

谁适合用

  • 从 ThingamaBlog / WordPress 迁移博客的人
  • 喜欢用 Markdown 写文章、不想碰数据库的人
  • 想把博客托管在 GitHub Pages 上的人
  • 需要 FTP 直传虚拟主机的传统站长
  • 喜欢一切尽在掌控的"静态站点原教旨主义者"

许可

MIT License。随便用,随便改,随便分发。