本项目遵循 Keep a Changelog 规范,版本号遵循 SemVer。
2026-07-08 · 基于 chatgpt 主题实战(真实引擎渲染)的修正与增强
-
修正
post.date类型描述(推翻上一轮"修正"):Jinja2 / EJS 渲染上下文经json.Marshal构建,post.date/updatedAt/createdAt是 RFC3339 字符串;仅 Go Templates 直接传 struct 才是time.Time。Jinja2 中对这些字段用|date:会报错并使整页降级(实战中曾导致首页 + 全部文章页降级)。template-variables.md/jinja2-guide.md(差异 8 重写)/SKILL.md规则 6 三处对齐,并给出正确用法:dateFormat/|relative/ 直接输出 /|slice。 -
archives分组键为大写Year/Posts(引擎ArchiveYearView无 json tag):小写取值静默为空。template-variables.md全局变量表 / 页面表 / 易错表更新。 -
新增 Pongo2 致命差异 13、14(
jinja2-guide.md12 → 14 个):- 13:
not x == y解析为(not x) == y,恒 false 且不报错(if 块静默消失),不等判断必须用!=; - 14:
loop.*由引擎 loader 自动映射到forloop.*(两种写法都可用),但loop.length无映射不可用。
- 13:
-
theme-config-schema.md类型表重写:GUI 实际只渲染input/textarea/select/toggle/picture-upload5 种;删除误列的number/color/boolean/code/image/array,新增「无效类型 → 替代方案」对照表与数字配置完整模式(select +|default:N|to_int)。 -
jinja2-guide.md自定义 filter 表补to_int:theme_config 数字经 GUI 保存后可能是字符串,与整数比较前必须转型。 -
theme-architecture.md新增《本机调试与配置缓存》:Gridea Pro 数据目录(~/Documents/Gridea Pro/)、主题 config.json 进程级缓存(改 customConfig 声明须重启应用,开发期可复制新目录名绕过)、降级视图识别(grepfallback-banner)、"渲染成功 ≠ 内容正确"的内容级验证要求。 -
SKILL.md:工作流 5 步 → 6 步(新增第 6 步真实引擎验证);关键规则 16 → 21 条(新增!=、archives 大写键、to_int、customConfig 类型白名单、config.json 缓存)。 -
scripts/validate_syntax.py新增 3 项静态检查:not x == y优先级陷阱(ERROR)、日期字段接|date:(ERROR)、customConfig type 白名单(ERROR,附替代建议)。 -
scripts/render_test.pymock 精度提升:datefilter 严格化(字符串输入直接报错,模拟 Pongo2 真实行为——此前静默通过,测不出整页降级级错误);now注入datetime对象(对齐 time.Time,支持 Go layout 常用格式);归档页注入大写Year/Posts分组数据;补to_intfilter 桩。 -
assets/mock-data*.json:文章date/createdAt/updatedAt升级为 RFC3339 完整格式(对齐真实上下文,使|slice:"5:10"等字符串操作语义正确)。 -
回归验证:chatgpt 主题 12/12 通过;存量主题(flavor-theme / simplecho / writecho / muse / amore-jinja2)结果与改动前基线完全一致(零误伤);注入 3 类真实坑的坏样本全部被新检查拦截。
-
references/template-variables.md:补齐与 Gridea Pro 真实运行时之间的多处差距:- Post 对象:补
id/abstract/description/toc/categories/tagsString/stats/prevPost/nextPost/createdAt/updatedAt/updatedAtFormat/published; - 修正旧文档错误:
post.date实际是time.Time(不是字符串),展示日期首选post.dateFormat;(勘误:此条已于 2026-07-08 推翻——Jinja2/EJS 上下文经 JSON 序列化,post.date是 RFC3339 字符串,仅 Go Templates 中是 time.Time,见上方条目); - 新增对象章节:
Category/PostStats/SimplePostView(prevPost / nextPost 的元素类型); - Tag 对象:补
slug/usedName;Memo 对象:补id/tags/createdAt/createdAtISO/dateFormat; - Pagination:补
currentPage/totalPages/totalPosts/hasPrev/hasNext/prevURL/nextURL,并保留prev/next兼容字段; - 全局变量表:补
category/current_tag(别名) /archives/links/commentSetting/site(config别名); - 新增页面
category.html:每个分类一份,由引擎RenderCategoryPages自动渲染到/category/<slug>/;同时澄清「没有categories.html」——引擎不暴露全站分类索引页和categories全局数组,要做总览得自己从posts[].categories聚合; - 新增章节《引擎自动生成的输出》:列出
/api/search.json(schema:[{title, link, date, tags, content}],content 已脱 HTML)//feed.xml//atom.xml//sitemap.xml//robots.txt//manifest.json,以及客户端 fetch 示例; - 上下篇导航语义警示:
prevPost在 Gridea Pro 里实际是数组前一项(更新的一篇),与 Hexo / Hugo 习惯相反;从其他生态移植主题时不能照搬「上一篇 = 更早」的标签。
- Post 对象:补
-
assets/mock-data.json:首篇 mock 文章补id/abstract/description/toc/categories/stats/prevPost/nextPost/createdAt/updatedAt等新字段;新增category全局对象供category.html渲染;标签补slug。 -
scripts/render_test.py:补category.html模板的 context 构建分支(注入category+ 按post.categories过滤 posts),与真实运行时对齐。
- 首个版本发布
SKILL.md:Gridea Pro 主题开发专家 Skill 入口,包含 5 步工作流和 16 条关键规则- 三种模板引擎支持:Jinja2 (Pongo2)、Go Templates、EJS
scripts/scaffold_theme.py:主题脚手架生成器scripts/validate_syntax.py:模板语法与变量名静态校验scripts/render_test.py:基于 mock 数据的渲染测试references/:完整参考文档(变量清单、三大引擎指南、架构、config schema、CSS 模式、SEO、质量清单)assets/starters/:三种引擎的起始模板assets/mock-data.json/mock-data-empty.json:渲染测试 fixture- 中文 README,含与
frontend-design等前端设计 Skill 的组合使用方式和 5 个 Prompt 模板