118、【Ubuntu】【Hugo】首页板块配置:Template Lookup Order(.Kind)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【Hugo】首页板块配置:Branch Bundle

分析了 Branch Bundle 的详细定义,介绍了 Leaf Bundle 和 Branch Bundle 的区别,以及 Hugo 模板系统的继承机制,下面继续分析

搭建私人博客

下面继续分析 Hugo 模板系统的继承机制 Template Lookup Order
https://gohugo.io/templates/lookup-order/?spm=5176.28103460.0.0.5efd7551qOOnnF

这里有比较关键的一点信息

从 Hugo v0.146.0 版本开始,模板系统被彻底重构了(重写了底层逻辑),官方正在努力更新所有相关文档,也就是说,当前文档可能不完整或滞后,但核心规则仍以这里的 Lookup Order 为主

Hugo v0.146.0 的版本就现在来说还不算久远,一个多月前(大概 25年底),更新的 Hugo 系统版本还是 v0.154.0

OK,下面是 Hugo 模板系统的核心逻辑,上篇 blog 解释过,这里不再赘述

OK,接下来是页面种类 Kind,这也是重点

首先,每个页面在 Hugo 里都有一个叫 Kind 的属性,用来表示这个页面的身份 ,关于 Kind 的官方描述如下
https://gohugo.io/methods/page/kind/#article

关于 Kind 的官方定义如下

可以看到,Kind 是 Hugo 页面对象的一个属性,这个属性会返回一个字符串,表示当前页面的种类,其可能的值只有 5 个:

  • home:首页 /
  • page:普通单页,比如关于页 /about/
  • section分类列表页,可以聚合很多文章,要详细介绍的
  • taxonomy:标签,分类列表页,比如 /categories/
  • term:术语页,较少用到

可以理解为 Kind 是 Hugo 给每个页面打的标签

OK,接下是 Kind 类型的一个示例

bash 复制代码
content/
├── books/
│   ├── book-1/
│   │   └── index.md    <-- kind = page
│   ├── book-2.md       <-- kind = page
│   └── _index.md       <-- kind = section
├── tags/
│   ├── fiction/
│   │   └── _index.md   <-- kind = term
│   └── _index.md       <-- kind = taxonomy
└── _index.md           <-- kind = home

可以看到,Hugo 会完全根据文件名和目录结构来解决 .Kind 是什么,不需要用户手动设置,其规则如下

文件名 所在位置 .Kind 说明
_index.md 网站根目录,比如 content/_index.md home 首页
普通 .mdindex.md 任意子目录下 page 单篇文章/页面
_index.md 子目录内,比如上面的 books/_index.md section 板块的列表页
_index.md taxonomy 目录下,比如 tags/_index.md taxonomy 标签,分类的总览页,总索引页
_index.md taxonomy 子目录下,比如上面的 tags/fiction/_index.md term 某个具体标签的列表页

可以看到,Hugo 识别 .Kind 全靠文件名和路径

OK,接下来是 .Kind 的使用方法

在任何模板文件中,比如 list.htmlsingle.htmlindex.html,可以通过 {``{ .Kind }} 来获取当前页面的类型,比如

bash 复制代码
{{ if eq .Kind "home" }}
  <!-- 这是首页 -->
  <h1>Welcome to My Site!</h1>
{{ else if eq .Kind "section" }}
  <!-- 这是分类页,比如 /books/ -->
  <h1>Books in {{ .Title }}</h1>
{{ end }}

或者简单的在模板中调试输出

html 复制代码
<!-- 在开发时临时加这行 -->
<p>当前页面 Kind: {{ .Kind }}</p>

.Kind 很重要,因为它是 Hugo 模板系统的核心开关,Hugo 根据 .Kind 决定用哪个模板,比如

  • .Kind = "home":优先找 index.html
  • .Kind = "page":优先用 single.html
  • .Kind = "section":优先用 list.html

还可以通过 .Kind 控制页面逻辑 ,比如只在首页显示欢迎语,而只在文章页显示作者信息,还可以避免样式错乱,比如首页用单栏布局,而文章页用两栏布局(侧边导航栏 + 正文内容)


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【Hugo】首页板块配置:Template Lookup Order

相关推荐
AOwhisky8 分钟前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..1 小时前
目录结构(FHS 标准)
linux·运维·服务器
2035去旅行1 小时前
嵌入式开发,如何选择C标准库
linux·arm开发
刘延林.1 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
CodeOfCC2 小时前
Linux 嵌入式arm64安装openclaw
linux·运维·服务器
宵时待雨3 小时前
linux笔记归纳3:linux开发工具
linux·运维·笔记
magrich3 小时前
安装NoMachine并解决无外接显示器桌面黑屏
linux·运维·服务器
fish_xk4 小时前
Linus基础指令
linux·服务器
用户34268877621964 小时前
Agent + Ollama 部署踩坑记录
ubuntu
宁波阿成4 小时前
在ubuntu22.04源码级安装sub2api
linux·运维·ubuntu·ai·api·token·中转站