117、【Ubuntu】【Hugo】首页板块配置:Branch Bundle

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

背景

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

分析了首页展示的内容类型,以及 Leaf Bundle 的详细定义,下面继续分析

搭建私人博客

OK,介绍完 Leaf Bundle,继续看 Branch Bundle,Branch Bundle 是首页板块配置里的核心概念 ,其官方描述如下 https://gohugo.io/content-management/page-bundles/#branch-bundles

Branch Bundle 是一个包含 _index.md 文件的目录注意,这里是下划线开头 _index.md,不是 Leaf Bundle 里面那样的 index.md ),这个 Branch Bundle 可以包含其他资源文件,比如 .md,图片等,也可以包含子目录,这些子目录可以是其他 Branch Bundles(带 _index.md 的目录),也可以是 Leaf Bundles(包含 index.md 的叶子目录),Branch Bundle 就像树的一根枝干,这跟枝干可以继续分叉,有后代

Branch Bundle 和 Leaf Bundle 的对比如下

  • Leaf Bundle:内含 index.md,不能有子目录,属于叶子,末端
  • Branch Bundle:内含 _index.md,可以有子目录,属于枝干,可以继续生长

OK,下面看示例如下

bash 复制代码
content/
├── branch-bundle-1/
│   ├── _index.md
│   ├── content-1.md
│   ├── content-2.md
│   ├── image-1.jpg
│   └── image-2.png
├── branch-bundle-2/
│   ├── a-leaf-bundle/
│   │   └── index.md
│   └── _index.md
└── _index.md

这里一共有 3 个 Branch Bundles:

  • 首页 Home Page:路径 content/_index.md,是顶级的 Branch Bundle,其包含两个子 Branch Bundles:branch-bundle-1 和 branch-bundle-2,本身没有额外的资源(比如图片,附件啥的没有)
  • branch-bundle-1:有 _index.md,是 branch bundle,包含资源 content-1.mdcontent-2.md(Page 类型资源),和 image-1.jpgimage-2.png(图片资源),没有子目录
  • branch-bundle-2:有 _index.md,是 branch bundle,包含一个子目录 a-leaf-bundle/(里面有 index.md,所以是 Leaf Bundle),说明 Branch Bundle 里可以包含 Leaf Bundle

OK,上面介绍了 Home Page,里面提到了顶级的 Branch Bundle,不过可惜,即使定义了 content/_index.md,也需要配合模板或者主题进行使用,而 PaperMod 并没有在 Home Page 首页,去处理这个顶级的 Branch Bundle,所以如果想在首页实现 Branch Bundle 的板块功能,需要用户自己稍微调整一下模板实现

在介绍模板实现之前,先来看下 Hugo 模板系统是如何工作的,这里涉及到 Hugo 的模板继承机制和 PaperMod 的设计哲学,Hugo 默认首页的渲染流程优先级如下

  • 查找 layouts/index.html,如果找到,就用
  • 找不到的话,就查找 layouts/_default/list.html
  • 如果还没有的话,就是用 PaperMod 主题提供的 themes/PaperMod/layouts/_default/list.html

而 PaperMod 没有 index.html,而是通过 list.html 实现了默认首页 ,关于这块模板系统的工作原理,可以参考官方描述 https://gohugo.io/templates/lookup-order/?spm=5176.28103460.0.0.5efd7551qOOnnF这里详细描述了 Hugo 模板的查找顺序,解释了 Hugo 如何为一个页面选择最合适的模板文件

Hugo 在渲染某个页面(比如首页 /,文章页 /ubuntu/hello,分类页 categories/hugo/)时,会按照一套规则去查找模板(最具体 most specific → 最通用 most common

  • 最具体:只适用于当前页面的模板,比如 layout/ubuntu/single.html
  • 最通用:适用于所有页面的默认模板,比如 layout/_default/single.html

Hugo 一旦找到第一个匹配的模板,就立刻使用这个匹配上的模板,不再继续往下查找了


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

相关推荐
Sapphire~2 小时前
Linux-14 ubuntu 安装 vscode
linux·vscode·ubuntu
HalvmånEver2 小时前
Linux:线程创建与终止下(线程六)
linux·运维·算法
firstacui2 小时前
Docker compose的安装与使用
运维·docker·容器
掘根2 小时前
【即时通讯系统】环境搭建1——gflags,spdlog
linux·运维·ubuntu
杜子不疼.2 小时前
内网监控工具翻身!Uptime Kuma+cpolar 实现远程运维自由
linux·运维·服务器
范纹杉想快点毕业2 小时前
STM32单片机与ZYNQ PS端 中断+状态机+FIFO 综合应用实战文档(初学者版)
linux·数据结构·数据库·算法·mongodb
拾光Ծ2 小时前
【Linux】Ext系列文件系统(一):初识文件系统
linux·运维·服务器·硬件架构·ext文件系统
陌上花开缓缓归以2 小时前
insmod 报错问题定位纪要
linux·arm开发
天荒地老笑话么2 小时前
Vim核心快捷键与运维实战指南
运维·vim·excel