参数配置
用 params 区段定义自定义站点参数,并在模板中读取。
用途
params 区段用于存放自定义参数:任何不属于 Hugo 内置配置项的键值对都可以写在 [params] 下。这些参数不会改变 Hugo 的构建行为,只是把数据交给模板使用,因此很适合放置站点副标题、联系方式、第三方服务 ID 一类的内容。
baseURL = 'https://example.org/'
locale = 'en-US'
title = 'Project Documentation'
[params]
subtitle = 'Reference, Tutorials, and Explanations'
[params.contact]
email = 'info@example.org'
phone = '+1 206-555-1212'在模板中读取
在模板里通过 Site 对象的 Params 方法访问自定义参数:
{{ .Site.Params.subtitle }} → Reference, Tutorials, and Explanations
{{ .Site.Params.contact.email }} → info@example.org嵌套的映射(map)用点号逐层访问,[params.contact] 对应 .Site.Params.contact,其下的 email 对应 .Site.Params.contact.email。
键名的大小写与分隔符
键名建议使用 camelCase 或 snake_case。TOML、YAML 和 JSON 都允许 kebab-case 键名,但 kebab-case 不是合法的标识符,无法用于链式访问,因此下面两种写法都可以:
{{ .Site.params.camelCase.foo }}
{{ .Site.params.snake_case.foo }}而下面这种写法会失败:
{{ .Site.params.kebab-case.foo }}原因在于模板语言把 - 解释为减号而不是名称的一部分。若确实需要 kebab-case 键名,只能通过索引语法读取,所以更稳妥的做法是在配置阶段就避开它。
多语言项目
多语言项目把 params 区段写在各个语言键之下,每个语言拥有各自独立的参数,互不干扰:
baseURL = 'https://example.org/'
defaultContentLanguage = 'en'
[languages.de]
direction = 'ltr'
label = 'Deutsch'
locale = 'de-DE'
title = 'Projekt Dokumentation'
weight = 1
[languages.de.params]
subtitle = 'Referenz, Tutorials und Erklärungen'
[languages.de.params.contact]
email = 'info@de.example.org'
phone = '+49 30 1234567'
[languages.en]
direction = 'ltr'
label = 'English'
locale = 'en-US'
title = 'Project Documentation'
weight = 2
[languages.en.params]
subtitle = 'Reference, Tutorials, and Explanations'
[languages.en.params.contact]
email = 'info@example.org'
phone = '+1 206-555-1212'命名空间
为避免命名冲突,模块和主题的作者应当为自己特有的参数加上命名空间,而不是直接占用 params 下的顶层键名:
[params.modules.myModule.colors]
background = '#efefef'
font = '#222222'站点侧读取这些设置时,同样从命名空间开始逐层访问:
{{ $cfg := .Site.Params.module.mymodule }}
{{ $cfg.colors.background }} → #efefef
{{ $cfg.colors.font }} → #222222要点回顾
| 项目 | 说明 |
|---|---|
| 区段名 | params,可嵌套任意层映射 |
| 键名风格 | camelCase 或 snake_case(kebab-case 无法链式访问) |
| 模板入口 | .Site.Params、.Site.Params.<键> |
| 多语言 | [languages.<lang>.params] |
| 模块/主题 | 建议加命名空间,如 [params.modules.myModule] |