模板函数
内容获取函数
| 函数 | 说明 |
|---|---|
pages |
当前语言全部页面 |
hidden_pages |
当前语言隐藏页面 |
sections |
当前语言栏目列表 |
taxonomies |
当前语言分类列表 |
get_pages([lang]) |
获取指定语言的全部页面,省略语言时使用当前语言 |
get_hidden_pages([lang]) |
获取指定语言的隐藏页面,省略语言时使用当前语言 |
get_sections([lang]) |
获取指定语言的栏目列表,省略语言时使用当前语言 |
get_taxonomies([lang]) |
获取指定语言的分类列表,省略语言时使用当前语言 |
get_page(path, [lang]) |
获取页面对象 |
get_page_url(path, [lang]) |
获取页面绝对链接 |
get_section(path, [lang]) |
获取栏目对象 |
get_section_url(path, [lang]) |
获取栏目绝对链接 |
get_taxonomy(name, [lang]) |
获取分类对象 |
get_taxonomy_url(name, [lang]) |
获取分类绝对链接 |
get_taxonomy_term(taxonomy, name, [lang]) |
获取分类项 |
get_taxonomy_term_url(taxonomy, name, [lang]) |
获取分类项绝对链接 |
dict(k, v, ...) |
构造 map |
slice(v, ...) |
构造列表 |
startsWith(s, prefix) |
判断字符串前缀 |
load_data(path, format) |
从 data/ 或 URL 加载数据 |
newScratch() |
创建临时模板存储 |
页面列表方法
OrderBy
1{% for page in pages.OrderBy("date desc, title asc") %}
排序字段:date、modified、title、weight 及任意 FrontMatter 字段。
GroupBy
1{% for group in pages.GroupBy("date:2006-01").OrderBy("name desc") %} 2 <h2>{{ group.Name }}</h2> 3 {% for page in group.Pages %} 4 <li>{{ page.Title }}</li> 5 {% endfor %} 6{% endfor %}
| 属性 | 说明 |
|---|---|
group.Name |
分组名称 |
group.Pages |
当前分组下的页面列表 |
group.Parent |
父分组 |
group.Children |
子分组列表 |
Limit
1{% for page in pages.Limit(10) %}
First / Last
1{{ pages.First() }} 2{{ pages.Last() }}
Reverse / FilterBy / OrderBy
1{% for page in pages.Reverse() %} 2{% for page in pages.FilterBy("'go' in tags") %} 3{% for page in pages.OrderBy("weight asc, date desc") %}
Related
获取相关(前/后)文章:
1{{ pages.Related(page).Prev }} 2{{ pages.Related(page).Next }} 3{{ pages.Related(page).HasPrev() }} 4{{ pages.Related(page).HasNext() }}
即 page.Prev、page.Next 的来源。
i18n 翻译函数
| 函数 | 说明 |
|---|---|
i18n(key) |
翻译字符串 |
T(key, args...) |
格式化翻译 (%d, %s, %f) |
_(key, args...) |
同上 |
过滤器
| 过滤器 | 说明 | 示例 |
|---|---|---|
truncate:N |
截取 N 字符 | {{ text | truncate:100 }} |
date:"layout" |
Go 时间格式 | {{ page.Date | date:"2006-01-02" }} |
lower |
转小写 | {{ text | lower }} |
upper |
转大写 | {{ text | upper }} |
split:sep |
分割 | {{ "a,b" | split:"," }} |
encrypt:"pw" |
加密 (需 hooks.encrypt) | {{ page.Content | encrypt:"123" }} |
parser:"markdown" |
使用已启用的内容解析器把字符串转为 HTML | {{ text | parser:"markdown" }} |
unmarshal:"yaml" |
解析 YAML/TOML/JSON 字符串 | {{ text | unmarshal:"yaml" }} |
jsonify |
转 JSON 字符串 | {{ page.FrontMatter | jsonify }} |
absURL |
转绝对 URL | {{ "posts/" | absURL }} |
relURL |
转相对 URL | {{ "/posts/" | relURL }} |
slient |
丢弃输出,仅保留函数副作用 | {{ scratch.Set("k", 1) | slient }} |
Date 格式参考:
| 格式 | 输出示例 | 用途 |
|---|---|---|
2006-01-02 |
2024-01-15 |
日期 |
15:04:05 |
20:35:00 |
时间 |
January 2, 2006 |
January 15, 2024 |
完整日期 |
Mon, 02 Jan 2006 15:04:05 -0700 |
RSS pubDate | |
2006-01-02T15:04:05Z07:00 |
ISO 8601 |
配置访问
1{{ config.title }} 2{{ config.base_url }} 3{{ config.author }} 4{{ config.description }} 5{{ config.GetString("params.my_key") }}
config 在模板中是当前语言的配置快照。普通值可用点号访问,需要 viper 方法时可使用 config.GetString(...)。
Scratch
1{{ scratch.Set("count", 1) | slient }} 2{{ scratch.Add("count", 2) | slient }} 3{{ scratch.Get("count") }} 4 5{% set local = newScratch() %} 6{{ local.Set("items", slice("a")) | slient }} 7{{ local.Add("items", "b") | slient }} 8{{ local.JSON("items") }}
支持方法:Set、Get、GetOrSet、Add、JSON。
数据加载
1{% set data = load_data("links.yaml", "yaml") %} 2{% set remote = load_data("https://example.com/data.json", "json") %}
本地路径从站点或主题的 data/ 目录读取;format 支持 yaml、toml、json,其他格式按字符串返回。读取失败时返回 nil 并记录 warn 日志。
Assets 块
1{% assets css %} 2<link rel="stylesheet" href="{{ config.base_url }}/{{ asset_url }}"> 3{% endassets %} 4 5{% assets files="scss/style.scss" sass_compiler="dartsass" filters="cssmin" output="css/style.min.css" %} 6<link rel="stylesheet" href="{{ asset_url }}"> 7{% endassets %}
需启用 hooks.assets。资源合并、Sass 编译、压缩和图片处理的配置见 assets hook。
Shortcode
1<shortcode youtube id="xxx" /> 2<shortcode code lang="python"> 3print("hello") 4</shortcode>
Shortcode 模板位于 templates/shortcodes/。模板中可用 params、body、name、counter、current_lang,页面内容提供 page,Section 内容提供 section。详细说明见 短代码 (Shortcode)。