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

相关推荐
70asunflower2 小时前
[特殊字符] Flameshot 完全指南:Ubuntu 下的终极截图工具
linux·运维·ubuntu
API开发2 小时前
CentOS 单独安装Docker Compose v2
linux·docker·centos·docker compose
蜡笔小炘2 小时前
LVS -- 部署NAT模式集群案例
linux·运维·服务器·lvs
我怎么又饿了呀2 小时前
CentOs 10 虚拟机安装【解决方法】VMware无法打开内核设备,未能启动虚拟机
linux·运维·centos
H Journey2 小时前
Centos与Ubuntu差异总结
linux·ubuntu·centos
阿拉伯柠檬2 小时前
Git原理与使用(一)
大数据·linux·git·elasticsearch·面试
冰冰的coco2 小时前
如何设置需要sudo的命令开机自启动
linux·运维·服务器
辞旧 lekkk2 小时前
【Linux】Linux进程控制(三)自主实现简易shell命令行解释器
linux·运维·服务器·学习·萌新
HIT_Weston2 小时前
119、【Ubuntu】【Hugo】首页板块配置:Template Lookup Order
linux·运维·ubuntu