Lektor
使用 Python、扁平文件内容模型和本地管理界面构建静态网站的 CMS。
项目概述
Lektor 通过 Record、INI 内容模型、Jinja 模板和本地 Admin UI 管理结构化内容,将编辑友好的扁平文件项目构建成可部署到任意静态平台的网站。
Lektor 是采用 BSD-3-Clause 许可证、使用 Python 编写的静态内容管理系统。它把 content 目录中的每个文件夹视为一个 Record,每个 contents.lr 保存由 INI Model 定义的结构化字段,附件则与内容放在同一目录。开发服务器会持续构建静态页面,并在 /admin/ 提供由模型自动生成的本地编辑界面;最终内容由 Jinja 模板、Query API、Flow Block 和图片操作渲染为静态文件。
主要特点
Lektor 将结构化内容模型、本地可视化编辑和静态构建结合,形成介于 SSG 与传统 CMS 之间的工作流。
Record 内容树
content 下每个文件夹对应一个 URL 和 Record,contents.lr 保存字段,图片与附件可以和记录共置。
INI 内容模型
models 目录中的 INI 文件定义字段类型、标签、说明、子记录、分页和附件行为,并驱动构建与编辑界面。
本地 Admin UI
开发服务器在 /admin/ 提供模型感知的表单,可创建、编辑、删除 Record 和附件,并实时查看构建结果。
Jinja 模板
模板通过 this 访问当前 Record,通过 site 查询整个内容数据库,并支持继承、Macro、Filter 与 Lektor Helper。
Flow Block
内容作者可在一个 Flow 字段中组合文本、图片、引用、画廊等预定义 Block,构建灵活而受控的页面。
Query 与 Pagination
模板可查询子记录、筛选、排序和分页,适合项目列表、博客、团队、案例和分类页面。
图片与附件操作
模板能够访问共置附件,并在构建期生成缩略图、裁切图片或处理视频资源。
Alternatives 与插件
Alternative 可管理同一 Record 的多语言版本,Python 插件则能增加字段、构建程序、事件和部署目标。
适用场景
适合需要非开发人员本地编辑结构化内容,同时希望保留 Git、纯文件存储和静态部署优势的网站。
企业与品牌网站
Page、Project、Team 和 News 等模型能为内容人员提供明确字段,同时输出高性能静态页面。
作品集与案例库
层级 Record、图片附件、缩略图和查询适合设计、摄影、建筑与代理商案例展示。
多语言营销站
Alternative、语言感知 URL 和模板可维护同一内容树的多个语言版本。
本地编辑的内容站
不熟悉 Git 或 Markdown 的编辑者可通过本地 Admin 表单更新内容,再由团队审核文件变化。
活动与目录网站
结构化模型、子记录、筛选和分页适合会议议程、人员目录、产品目录与资源集合。
静态优先的小型 CMS
希望摆脱数据库和在线管理后台,但仍需要字段模型与编辑表单的项目可使用 Lektor。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Lektor 擅长的地方
- 结构化 Model 同时约束数据并自动生成编辑表单
- 本地 Admin UI 降低非开发者编辑扁平文件内容的门槛
- Record 层级、附件共置和 Query API 适合复杂内容关系
- Jinja 模板与 Python 插件便于后端和内容团队定制
- 内容、模型和模板均可进入 Git,修改历史透明可审查
- 最终输出静态文件,不需要生产数据库或 CMS 服务器
需要注意
采用前应考虑的问题
它不是带用户、权限和审核流的托管 CMS;远程编辑需要为作者提供安全环境或另行设计发布工作流。
主题、插件、教程和托管集成少于主流 SSG 与 Headless CMS,关键插件采用前应检查维护状态。
Model 影响字段、Record 层级、URL 与 Admin 体验,频繁更改已上线模型会带来内容迁移和模板兼容成本。
大量编辑者同时修改 contents.lr 时仍可能产生 Git 冲突,二进制附件也会增加仓库体积。
复杂 Sass、TypeScript、图片 CDN 和 Bundle 优化通常依赖插件或外部 npm 工具,应明确开发与构建顺序。
lektor deploy 只发布现有输出,必须先确认 build 成功;凭据也不应明文提交到 .lektorproject。
快速开始
安装 Lektor,创建项目,定义 Project 内容模型、Record 与 Jinja 模板,再通过本地 Admin 编辑并构建静态目录。
bashpython -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install Lektor
lektor quickstart --name "开源项目志" --path my-lektor-site
cd my-lektor-site
lektor server
# 网站:http://localhost:5000
# 管理界面:http://localhost:5000/admin/ini; models/project.ini
[model]
name = Project
label = {{ this.title }}
[fields.title]
label = 项目名称
type = string
size = large
[fields.description]
label = 项目简介
type = markdown
[fields.homepage]
label = 项目主页
type = url
[fields.featured]
label = 是否推荐
type = booleanini_model: project
---
title: Lektor
---
description:
Lektor 使用结构化内容模型和 Jinja 模板生成静态网站。
它还提供一个与 Model 对应的本地管理界面。
---
homepage: https://www.getlektor.com/
---
featured: yeshtml{# templates/project.html #}
{% extends "layout.html" %}
{% block title %}{{ this.title }}{% endblock %}
{% block body %}
<article>
<h1>{{ this.title }}</h1>
<div class="description">{{ this.description }}</div>
<a href="{{ this.homepage }}" rel="noopener">
访问项目主页
</a>
</article>
{% endblock %}html{# templates/projects.html #}
{% extends "layout.html" %}
{% block body %}
<h1>{{ this.title }}</h1>
{% for project in this.children.order_by("title") %}
<article>
<h2>
<a href="{{ project|url }}">{{ project.title }}</a>
</h2>
{{ project.description }}
</article>
{% endfor %}
{% endblock %}bashlektor build --output-path build
# 查看项目默认构建目录
lektor project-info --output-path
# 如果已配置发布目标,先构建再部署
lektor build && lektor deploy production下一步:将 .lektorproject、models、content、templates、assets 和 packages 一起提交到 Git;部署时明确指定输出目录,并始终先成功执行 lektor build,再单独运行 deploy。
类似项目
这些工具也使用文件与模板生成静态网站,但 Lektor 以结构化 Model 和本地 Admin UI 提供更接近 CMS 的编辑体验。
Nikola
使用 Python 构建、支持多种输入格式、增量任务和图片画廊的静态网站生成器。
查看项目Pelican
使用 Python、Jinja 和 Markdown 或 reStructuredText 构建内容网站的静态生成器。
查看项目Jekyll
使用 Ruby、Markdown 和 Liquid 构建博客与内容网站的成熟静态站点生成器。
查看项目Hugo
使用 Go 编写、以快速构建和完整内容管理能力著称的静态站点生成器。
查看项目Grav
基于 PHP、使用扁平文件存储并提供管理面板的现代 CMS。
访问官网Publii
通过桌面应用管理内容并生成静态网站的图形化 CMS。
访问官网Lektor vs Hugo
Lektor 与 Hugo 都将文件内容构建为静态网站;Lektor 以结构化 Model、本地 Admin 和 Python/Jinja 扩展提供 CMS 体验,Hugo 则以单文件工具、Markdown 内容模型和极快构建见长。
| 比较维度 | Lektor | Hugo |
|---|---|---|
| 核心实现 | Python 应用,通过虚拟环境和 pip 使用 | Go 编写的独立可执行文件 |
| 内容存储 | 文件夹 Record、contents.lr 字段与共置附件 | Markdown Front Matter、Section 与 Page Bundle |
| 内容模型 | INI Model 定义字段、子记录、Flow 和 Admin 表单 | 内容类型、Archetype、Taxonomy 和模板约定 |
| 编辑体验 | 开发服务器提供本地可视化 Admin | 主要使用文本编辑器或外部 Git CMS |
| 模板系统 | Jinja2、Query API 和 Python Plugin | Go Template、Partial、Shortcode 和 Hugo Function |
| 构建性能 | 增量构建适合中小型结构化内容站 | 大型内容量和全量构建通常更快 |
| 资源处理 | 附件、缩略图与插件或外部前端工具 | Hugo Pipes、Image Processing 和 Page Resource |
| 更适合 | 需要本地 CMS、结构化字段和编辑表单的网站 | 大型 Markdown、多语言和重视构建速度的内容站 |
如果内容需要严格字段模型、附件与记录关系,并希望让编辑者通过本地表单维护,Lektor 的静态 CMS 模型更合适;如果作者已经习惯 Markdown、页面数量很大,或需要成熟的多语言与资源管线,Hugo 更直接。选择 Lektor 前应先用真实模型验证协作方式、Admin 部署边界和插件维护情况。
资料核验
版本、维护信息与本页采用的官方资料来源。
本次核验覆盖 Lektor 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 24 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。