返回项目目录
前端框架精选项目

Lektor

使用 Python、扁平文件内容模型和本地管理界面构建静态网站的 CMS。

主要语言Python
开源许可BSD-3-Clause
项目类型前端框架
维护状态活跃维护
OVERVIEW

项目概述

Lektor 通过 Record、INI 内容模型、Jinja 模板和本地 Admin UI 管理结构化内容,将编辑友好的扁平文件项目构建成可部署到任意静态平台的网站。

Lektor 是采用 BSD-3-Clause 许可证、使用 Python 编写的静态内容管理系统。它把 content 目录中的每个文件夹视为一个 Record,每个 contents.lr 保存由 INI Model 定义的结构化字段,附件则与内容放在同一目录。开发服务器会持续构建静态页面,并在 /admin/ 提供由模型自动生成的本地编辑界面;最终内容由 Jinja 模板、Query API、Flow Block 和图片操作渲染为静态文件。

核心语言Python
模板引擎Jinja2
内容存储扁平文件
FEATURES

主要特点

Lektor 将结构化内容模型、本地可视化编辑和静态构建结合,形成介于 SSG 与传统 CMS 之间的工作流。

01

Record 内容树

content 下每个文件夹对应一个 URL 和 Record,contents.lr 保存字段,图片与附件可以和记录共置。

02

INI 内容模型

models 目录中的 INI 文件定义字段类型、标签、说明、子记录、分页和附件行为,并驱动构建与编辑界面。

03

本地 Admin UI

开发服务器在 /admin/ 提供模型感知的表单,可创建、编辑、删除 Record 和附件,并实时查看构建结果。

04

Jinja 模板

模板通过 this 访问当前 Record,通过 site 查询整个内容数据库,并支持继承、Macro、Filter 与 Lektor Helper。

05

Flow Block

内容作者可在一个 Flow 字段中组合文本、图片、引用、画廊等预定义 Block,构建灵活而受控的页面。

06

Query 与 Pagination

模板可查询子记录、筛选、排序和分页,适合项目列表、博客、团队、案例和分类页面。

07

图片与附件操作

模板能够访问共置附件,并在构建期生成缩略图、裁切图片或处理视频资源。

08

Alternatives 与插件

Alternative 可管理同一 Record 的多语言版本,Python 插件则能增加字段、构建程序、事件和部署目标。

USE CASES

适用场景

适合需要非开发人员本地编辑结构化内容,同时希望保留 Git、纯文件存储和静态部署优势的网站。

企业与品牌网站

Page、Project、Team 和 News 等模型能为内容人员提供明确字段,同时输出高性能静态页面。

作品集与案例库

层级 Record、图片附件、缩略图和查询适合设计、摄影、建筑与代理商案例展示。

多语言营销站

Alternative、语言感知 URL 和模板可维护同一内容树的多个语言版本。

本地编辑的内容站

不熟悉 Git 或 Markdown 的编辑者可通过本地 Admin 表单更新内容,再由团队审核文件变化。

活动与目录网站

结构化模型、子记录、筛选和分页适合会议议程、人员目录、产品目录与资源集合。

静态优先的小型 CMS

希望摆脱数据库和在线管理后台,但仍需要字段模型与编辑表单的项目可使用 Lektor。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

Lektor 擅长的地方

  • 结构化 Model 同时约束数据并自动生成编辑表单
  • 本地 Admin UI 降低非开发者编辑扁平文件内容的门槛
  • Record 层级、附件共置和 Query API 适合复杂内容关系
  • Jinja 模板与 Python 插件便于后端和内容团队定制
  • 内容、模型和模板均可进入 Git,修改历史透明可审查
  • 最终输出静态文件,不需要生产数据库或 CMS 服务器

需要注意

采用前应考虑的问题

Admin 主要面向本地使用

它不是带用户、权限和审核流的托管 CMS;远程编辑需要为作者提供安全环境或另行设计发布工作流。

生态规模较小

主题、插件、教程和托管集成少于主流 SSG 与 Headless CMS,关键插件采用前应检查维护状态。

内容模型需要前期设计

Model 影响字段、Record 层级、URL 与 Admin 体验,频繁更改已上线模型会带来内容迁移和模板兼容成本。

扁平文件有协作边界

大量编辑者同时修改 contents.lr 时仍可能产生 Git 冲突,二进制附件也会增加仓库体积。

前端资源管线需自行组合

复杂 Sass、TypeScript、图片 CDN 和 Bundle 优化通常依赖插件或外部 npm 工具,应明确开发与构建顺序。

部署不会自动构建

lektor deploy 只发布现有输出,必须先确认 build 成功;凭据也不应明文提交到 .lektorproject。

QUICK START

快速开始

安装 Lektor,创建项目,定义 Project 内容模型、Record 与 Jinja 模板,再通过本地 Admin 编辑并构建静态目录。

1安装并创建 Lektor 项目
bash
python -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/
2定义 Project 内容模型
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 = boolean
3添加一条结构化内容
ini
_model: project
---
title: Lektor
---
description:

Lektor 使用结构化内容模型和 Jinja 模板生成静态网站。
它还提供一个与 Model 对应的本地管理界面。
---
homepage: https://www.getlektor.com/
---
featured: yes
4创建 Project 模板
html
{# 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 %}
5查询并列出子记录
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 %}
6构建到明确的静态目录
bash
lektor build --output-path build

# 查看项目默认构建目录
lektor project-info --output-path

# 如果已配置发布目标,先构建再部署
lektor build && lektor deploy production

下一步:将 .lektorproject、models、content、templates、assets 和 packages 一起提交到 Git;部署时明确指定输出目录,并始终先成功执行 lektor build,再单独运行 deploy。

ALTERNATIVES

类似项目

这些工具也使用文件与模板生成静态网站,但 Lektor 以结构化 Model 和本地 Admin UI 提供更接近 CMS 的编辑体验。

COMPARISON

Lektor vs Hugo

Lektor 与 Hugo 都将文件内容构建为静态网站;Lektor 以结构化 Model、本地 Admin 和 Python/Jinja 扩展提供 CMS 体验,Hugo 则以单文件工具、Markdown 内容模型和极快构建见长。

比较维度LektorHugo
核心实现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 PluginGo Template、Partial、Shortcode 和 Hugo Function
构建性能增量构建适合中小型结构化内容站大型内容量和全量构建通常更快
资源处理附件、缩略图与插件或外部前端工具Hugo Pipes、Image Processing 和 Page Resource
更适合需要本地 CMS、结构化字段和编辑表单的网站大型 Markdown、多语言和重视构建速度的内容站
如何选择

如果内容需要严格字段模型、附件与记录关系,并希望让编辑者通过本地表单维护,Lektor 的静态 CMS 模型更合适;如果作者已经习惯 Markdown、页面数量很大,或需要成熟的多语言与资源管线,Hugo 更直接。选择 Lektor 前应先用真实模型验证协作方式、Admin 部署边界和插件维护情况。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 26 日
核验版本官方当前稳定版与文档主线
内容维护Docs100 编辑整理
项目维护状态活跃维护

本次核验覆盖 Lektor 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 24 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 24 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库