Skip to content

fix(mock+docs): 友链字段对齐 Gridea Pro 真实运行时#1

Merged
Tespera merged 1 commit into
mainfrom
fix-mock-link-fields
Apr 25, 2026
Merged

fix(mock+docs): 友链字段对齐 Gridea Pro 真实运行时#1
Tespera merged 1 commit into
mainfrom
fix-mock-link-fields

Conversation

@Tespera
Copy link
Copy Markdown
Member

@Tespera Tespera commented Apr 25, 2026

问题

skill 的 mock 数据和 Gridea Pro 真实运行时的友链对象结构不一致,导致主题作者无法靠 `render_test.py` 暴露真实问题。具体表现:

  • 主题用 `link.name` / `link.url` 写友链页 → `render_test` PASS、CI 也过 → 客户端实测空白
  • `bitcron-pro` 用真实字段 `link.siteName` → 客户端实测正常 → 但 `render_test` 反而显示空
  • `references/template-variables.md` 漏列 Link 对象字段表,作者只能猜

仓库当前三个 Jinja2 主题(`bitcron-pro` / `memos` / 即将合入的 `liushen`)三种写法,两种是错的——这本身就说明文档和 mock 都不够规范。

Gridea Pro 真实运行时(来源代码确认)

维度 之前 mock Gridea Pro 真实
数据位置 顶层 `links` `customConfig.links`(同时暴露为顶层 `links` 和 `theme_config.links`)
名称字段 `name` `siteName`
链接字段 `url` `siteLink`
描述字段 `description` `description` ✅
头像字段 `avatar` `avatar` ✅

代码证据:

修复内容

1. `assets/mock-data.json`

友链对象字段对齐真实运行时:`name` → `siteName`,`url` → `siteLink`,删除 `id`(真实运行时不暴露)。

2. `scripts/render_test.py`

`build_context()` 复刻 `jinja2_renderer.buildContext` 的双路径行为 —— 把 mock 友链同时注入到顶层 `links` 和 `theme_config.links`(之前只注入了顶层)。删除 links.html 分支的特殊处理(base ctx 已包含)。

3. `references/template-variables.md`

  • 新增「Link 对象」整章节:4 个真实字段 + 完整遍历示例 + 易错速查
  • 「各页面可用变量表」加注:`links` 是全局变量、所有页面可用
  • 文末「易错变量速查」总表追加 `link.name → siteName` 等 4 行

验证

  • ✅ JSON 合法(`json.load` 通过)
  • ✅ `bitcron-pro` 主题 `links.html`:之前 mock 渲染显示空名称,修复后正确输出
    `<div class="link_name">Gridea Pro` + `<div class="link_desc">基于 Wails 的桌面静态博客写作客户端`
  • ✅ 修改全部为增量性质——不删除任何旧逻辑、不修改任何主题、不影响其他模板的渲染状态

配套 PR

Test plan

  • CI 通过
  • 装上含改动的 skill 后,对 `bitcron-pro` 跑 `render_test.py`,检查 `links.html` 输出包含站点名称和描述
  • 主题作者按 `template-variables.md` 新增的 Link 章节写友链页,能正确读出字段

🤖 Generated with Claude Code

## 问题

skill 的 mock 数据和 Gridea Pro 真实运行时的友链对象结构不一致,导致:

- 主题作者用 `link.name` / `link.url` 写模板 → mock 测试 PASS,**但客户端真实运行时空白**(`bitcron-pro` 的反例:用真实字段 `link.siteName` 反而 mock 测试空白)
- `template-variables.md` 没有 Link 对象字段表,作者只能猜
- 现有主题三种写法、两种是错的、一种是对的但 mock 渲染失败 —— 用户在客户端实测才能暴露

## Gridea Pro 真实运行时(来源代码确认)

- 数据来源:`backend/internal/engine/data_builder.go` 第 232-247 行
  把 `domain.Link` 注入到 `customConfig.links`,字段重命名:
  - `Name` → `siteName`
  - `Url`  → `siteLink`
  - `Description` / `Avatar` 保持原名
- 渲染暴露:`backend/internal/render/jinja2_renderer.go` 第 231-256 行
  把 `customConfig.links` **同时**暴露为顶层 `links` 变量和 `theme_config.links`
  → 主题既可以写 `{% for l in links %}` 也可以写 `{% for l in theme_config.links %}`

## 修复

### 1. `assets/mock-data.json`
友链字段从 `name` / `url` 改为 `siteName` / `siteLink`,对齐真实运行时。
删除 `id` 字段(真实运行时不暴露给模板)。

### 2. `scripts/render_test.py`
`build_context()` 复刻 `jinja2_renderer.buildContext` 行为:
把 mock 友链同时注入到顶层 `links` 和 `theme_config.links`(之前只注入了顶层)。
删除 links.html 分支的特殊处理(base ctx 已包含)。

### 3. `references/template-variables.md`
- 新增「Link 对象」章节,列出 4 个真实字段 + 完整遍历示例 + 易错速查
- 「各页面可用变量表」补充说明 `links` 全局可用
- 文末「易错变量速查」总表加入 `link.name → siteName` 等 4 行

## 验证

- ✅ JSON 合法
- ✅ bitcron-pro 主题 links.html:之前 mock 渲染显示空白,修复后正确输出
  「Gridea Pro / 基于 Wails 的桌面静态博客写作客户端」
- ✅ 修改全部为增量性质,不删除任何旧逻辑,不影响其他模板

## 配套关联

- gridea-pro-themes#9:liushen 主题友链页同样字段问题的双兼容修复(已提)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Tespera Tespera merged commit 17c44eb into main Apr 25, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant