Skip to content
Back to skills

gridea-theme-builder

ASecurity

Gridea Pro 博客主题开发专家。支持 Jinja2 (Pongo2)、Go Templates、EJS 三种模板引擎。提供主题脚手架生成、语法验证、渲染测试、避坑指南和完整的模板变量参考。当用户要求创建 Gridea 主题、修改 Gridea 主题、修复主题渲染问题、学习 Gridea 主题开发、从 EJS/Hugo 迁移主题时触发。触发关键词:Gridea 主题、博客主题、theme 开发、模板语法、主题配置、theme config。

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 26, 2026
developmentpythongobashvuenode

Security analysis

A100/100

Pro scans all 18 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add Gridea-Pro/theme-builder-skill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of gridea-theme-builder?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for gridea-theme-builder
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gridea-pro-gridea-theme-builder/badge)](https://www.skillsdirectory.com/skills/gridea-pro-gridea-theme-builder)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: gridea-theme-builder
description: >
  Gridea Pro 博客主题开发专家。支持 Jinja2 (Pongo2)、Go Templates、EJS 三种模板引擎。提供主题脚手架生成、语法验证、渲染测试、避坑指南和完整的模板变量参考。当用户要求创建 Gridea 主题、修改 Gridea 主题、修复主题渲染问题、学习 Gridea 主题开发、从 EJS/Hugo 迁移主题时触发。触发关键词:Gridea 主题、博客主题、theme 开发、模板语法、主题配置、theme config。
---

# Gridea Pro 主题开发专家

## 概述

本 Skill 将 AI Agent 变为 Gridea Pro 主题开发专家。Gridea Pro 是基于 Go + Wails + Vue 3 的桌面静态博客客户端,支持 Jinja2 (Pongo2)、Go Templates、EJS 三种模板引擎。本 Skill 覆盖主题脚手架生成、模板编写、语法验证、渲染测试的全流程,并内置三大引擎的避坑指南和完整变量参考,确保生成的主题能一次通过渲染。

## 工作流程

按以下 5 步执行主题开发任务:

### 第 1 步:确定模板引擎

阅读下方引擎选择表,根据用户场景选定引擎。若用户未明确指定,默认使用 Jinja2。

### 第 2 步:生成脚手架

运行 `scripts/scaffold_theme.py` 生成主题骨架目录和起始模板文件。

### 第 3 步:开发模板

在脚手架基础上修改模板文件。**必须先阅读 `references/template-variables.md`**,再阅读所选引擎的专属指南,然后开始编写模板代码。

### 第 4 步:语法验证

运行 `scripts/validate_syntax.py` 检查所有模板文件的语法错误、标签配对、变量名正确性和引擎特有陷阱。

### 第 5 步:渲染测试

运行 `scripts/render_test.py` 使用 mock 数据渲染全部页面,检查渲染错误和残留模板标签。

## 引擎选择表

| 场景 | 推荐引擎 | 原因 |
|------|----------|------|
| 新主题开发(默认推荐) | Jinja2 | 语法直觉、跨语言通用、模板继承优雅 |
| 从 Hugo 迁移 | Go Templates | 语法相似,迁移成本低 |
| 从旧版 Gridea 迁移 | EJS → Jinja2 转换 | 旧版用 EJS,推荐趁机迁移到 Jinja2 |
| 开发者熟悉 Go | Go Templates | 与 Gridea Pro 后端语言一致 |

## 参考文件导航

### 必读(开发任何主题前)

| 文件 | 说明 |
|------|------|
| `references/template-variables.md` | 所有模板变量完整参考。**最重要的文件**——渲染出错 80% 因为变量名写错 |
| `references/theme-architecture.md` | 主题目录结构、文件命名规范、渲染生命周期、静态资源路径规则 |
| `references/theme-config-schema.md` | config.json 配置声明规范,定义 GUI 设置面板的字段类型和格式 |

### 引擎专属(选定引擎后阅读对应文件)

| 文件 | 说明 |
|------|------|
| `references/jinja2-guide.md` | Jinja2 (Pongo2) 完整指南,含 14 个 Pongo2 与标准 Jinja2 的致命差异 |
| `references/go-templates-guide.md` | Go Templates 完整指南,含作用域陷阱、nil panic 防护、CustomConfig map 访问、safeHTML/safeCSS 安全输出、从 Jinja2 迁移速查表 |
| `references/ejs-guide.md` | EJS 兼容指南 + EJS → Jinja2 逐行迁移对照表 |

### 按需阅读

| 文件 | 说明 |
|------|------|
| `references/css-patterns.md` | 博客 CSS 设计模式:中文排版、暗色模式、响应式布局、代码高亮 |
| `references/seo-and-meta.md` | Open Graph、Twitter Card、JSON-LD、RSS 模板 |
| `references/quality-checklist.md` | 发布前质量检查清单 |

## 脚本使用说明

### scaffold_theme.py — 生成主题脚手架

```bash
python scripts/scaffold_theme.py <theme-name> --engine jinja2|go|ejs [--output-dir ./themes]
```

根据指定引擎生成完整的主题目录结构,包含 config.json、所有必需和可选模板文件、assets 目录和示例 CSS。默认输出到当前目录的 `themes/<theme-name>/`。

示例:

```bash
python scripts/scaffold_theme.py my-blog --engine jinja2
python scripts/scaffold_theme.py hugo-migrated --engine go --output-dir ./custom-themes
```

### validate_syntax.py — 语法验证

```bash
python scripts/validate_syntax.py <theme-dir>
```

扫描主题目录下所有模板文件,执行以下检查:
- 模板标签配对(未闭合的 block/for/if 等)
- 变量名拼写(与 template-variables.md 中的标准变量名对比)
- 引擎特有陷阱检测(如 Pongo2 的括号误用、Go Templates 的 nil 访问)
- 必需文件是否存在

示例:

```bash
python scripts/validate_syntax.py ./themes/my-blog
```

### render_test.py — 渲染测试

```bash
python scripts/render_test.py <theme-dir> [--output-dir ./test-output]
```

使用内置的 mock 数据渲染所有页面模板到静态 HTML 文件,检查:
- 渲染是否报错
- 输出中是否有残留的模板标签(`{{`、`{%`、`<%` 等)
- 链接路径是否正确

默认输出到 `./test-output/`。

示例:

```bash
python scripts/render_test.py ./themes/my-blog
python scripts/render_test.py ./themes/my-blog --output-dir ./preview
```

## 关键规则

以下规则**必须严格遵守**,违反任一条都可能导致主题渲染失败:

### 通用规则

1. **开发前必读变量参考**——在编写任何模板代码之前,必须先阅读 `references/template-variables.md`
2. **开发前必读引擎指南**——在编写模板之前,必须先阅读所选引擎的专属指南
3. **禁止猜测变量名**——必须使用变量参考中的精确名称,不可凭记忆或推测
4. **区分 config 和 theme_config**——`config` 用于访问站点级配置(domain、siteName 等),`theme_config` 用于访问 config.json 中 customConfig 定义的主题自定义配置项

### Jinja2 (Pongo2) 专属规则

5. **过滤器参数用冒号不用括号**——正确:`{{ value|default:"fallback" }}`,错误:`{{ value|default("fallback") }}`
6. **post.date 是字符串不是时间对象**——`post.date` 已经是格式化后的字符串,不要对其使用 `|date` 过滤器
7. **include 路径始终相对于 templates/ 根目录**——正确:`{% include "partials/header.html" %}`,不是相对于当前文件路径
8. **输出 HTML 内容必须用 safe 过滤器**——`{{ post.content|safe }}`,否则 HTML 会被转义

### Go Templates 专属规则

9. **访问嵌套字段前必须判空**——`{{ if .Post }}{{ .Post.Title }}{{ end }}`,否则 nil 时会 panic
10. **变量名必须 PascalCase**——`.Config.SiteName` 不是 `.config.siteName`,大小写错误会输出空值或 `<no value>`
11. **CustomConfig 是 map 类型,必须用 index 访问**——`{{ index .Site.CustomConfig "showSearch" }}`,不能用点号 `.Site.CustomConfig.showSearch`
12. **CustomConfig 中的 HTML/CSS 内容必须用 safeHTML/safeCSS**——否则被自动转义为纯文本
13. **template 调用末尾必须带 `.` 传递上下文**——`{{ template "header" . }}`,漏掉 `.` 会导致组件内所有变量为 nil
14. **没有模板继承**——不支持 extends/block,每个页面写完整骨架 + template 组件组装

### EJS 专属规则

15. **禁止使用 require()**——EJS 运行时不支持 Node.js 的 `require()`,JS 能力有限

### 静态资源规则

16. **assets/ 前缀会被去除**——`assets/styles/main.css` 在输出中变为 `/styles/main.css`,模板中引用时不加 `assets/` 前缀

Files in this skill

  • CHANGELOG.md3.1 KB
  • CLAUDE.md3.6 KB
  • SKILL.md7.2 KB
  • assets/mock-data-empty.json785 B
  • assets/mock-data.json9.9 KB
  • references/css-patterns.md25.6 KB
  • references/ejs-guide.md26.2 KB
  • references/go-templates-guide.md35.7 KB
  • references/jinja2-guide.md37.2 KB
  • references/quality-checklist.md5.4 KB
  • references/seo-and-meta.md17 KB
  • references/template-variables.md24.5 KB
  • references/theme-architecture.md9.6 KB
  • references/theme-config-schema.md13.9 KB
  • requirements.txt12 B
  • scripts/render_test.py28.1 KB
  • scripts/scaffold_theme.py46.5 KB
  • scripts/validate_syntax.py23.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.