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

相关推荐
Lust Dusk9 分钟前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
ShineWinsu44 分钟前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
千千寰宇44 分钟前
[Linux/Ollama] Termux : 一款运行在 Android 平台上的开源终端模拟器与 Linux 环境应用、支持在手机上基于Ollama部署LLM
linux
lingran__3 小时前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
Dlrb12114 小时前
Linux驱动---sys文件系统自动添加设备节点、添加调试节点以及MISC设备驱动的解释
linux·imx6ull·misc·设备节点·sys文件系统
刘某的Cloud4 小时前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
70asunflower4 小时前
Linux 性能排查分析完全教程
linux·运维
dok126 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (11)kmalloc 动态内存分配和struct file中的私有数据
linux·驱动开发·算法
无足鸟ICT6 小时前
【RHCA+】if判断
linux
大魔王爱学习6 小时前
终端bash&zsh中实现基于前缀的历史命令搜索
linux·bash