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

相关推荐
MaximusCoder16 小时前
等保测评命令——达梦数据库 DM
linux·运维·数据库·安全·ffmpeg·安全威胁分析
桌面运维家16 小时前
Linux VHD 更新指南:提升虚拟磁盘性能
linux·运维·服务器
Shining059616 小时前
AI 编译器系列(四)《AI 编译器中的后端优化》
linux·服务器·人工智能·线性代数·算法·triton·ai编译器
pd_linux16 小时前
【无标题】arm v8 速记
linux
sagima_sdu16 小时前
主流开源大模型架构全景
大数据·linux·人工智能
Darth Nihilus16 小时前
Raspberry Pi Compute Module Zero Development Board开发板(四)
linux·嵌入式硬件
Xzq21050916 小时前
Reactor模式
linux·网络
小鸡吃米…16 小时前
Python 中的并发 —— 进程池
linux·服务器·开发语言·python
星辰引路-Lefan16 小时前
全平台 Docker 部署 CPA(CLIProxyAPI Plus) 灵活定制指南 (Linux/Windows)——接入Codex
linux·windows·docker·ai·ai编程
历程里程碑16 小时前
40 UDP - 2 C++实现英汉词典查询服务
linux·开发语言·数据结构·c++·ide·c#·vim