119、【Ubuntu】【Hugo】首页板块配置:Template Lookup Order

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

背景

上篇 blog
【Ubuntu】【Hugo】首页板块配置:Template Lookup Order(.Kind)

分析了 Hugo 模板系统的继承机制 Template Lookup Order,并着重分析了里面的 .Kind 机制,以及 Hugo 可以用 .Kind 做什么,下面继续分析

搭建私人博客

继续分析
https://gohugo.io/templates/lookup-order/?spm=5176.28103460.0.0.5efd7551qOOnnF#kind

Template Lookup Order 中关于 Kind 的描述

后面这段话比较重要

  • 如果页面是单个内容页,比如一篇博客,那么该页面属于 single page,Hugo 会去找 single.html 模板
  • 如果页面是列表页,比如 home 首页,categories 分类页,tags 标签页,section 板块页,那么它们都属于 list page,Hugo 就回去找 list.html 模板

这里可以看到,首页 / 虽然特殊,但其本质上属于一个 list page ,所以当用户访问首页 / 时,Hugo 知道其 .Kind = "home",因为 home 属于 list page,Hugo 会优先找 index.html(首页专用),找不到就退一步去找 list.html

这就是 _default/list.html 能渲染首页的原因,如果没有更具体的 index.html 模板,Hugo 就会用通用的 _default/list.html 作为兜底,PaperMod 就是靠 _default/list.html 来渲染首页的 ,所以在 PaperMod 中,没有 index.html 也能显示首页,但如果用户自己新建 index.html 的话就能完全接管首页,PaperMod 选择只用一个 list.html 来搞定所有列表页,体现其极简主义的风格

OK,除了 .Kind 类型的匹配,还有如下匹配规则

  • Layout:可以在文章的 front matter 汇总指定,比如
bash 复制代码
---
layout: featured
---

此时 Hugo 就会优先查找 featured.html 模板,而不是默认的 single.html,这样可以为特殊文章使用不同的布局,比如置顶文章,广告页等等

Output Format:模板的输出格式,每个模板可以输出多种格式的页面(文件),比如 HTML,RSS,AMP,JSON 等,模板名可以包含格式名,方便辨认,比如

  • index.html:默认 HTML 模板
  • index.rss.xml:RSS 订阅模板
  • single.amp.html:AMP 加速模板

OK,继续往下看

Language:在多语言站点中,模板可按语言区分,文件命名规则 index.[lang].[format].html,比如

  • index.en.html:英语首页
  • index.zh.html:中文首页

Type:内容类型,默认为文件所在根目录名,比如 content/posts/xxx.mdTypeposts,可以在 front matter 中自定义 type 进行覆盖,比如

bash 复制代码
---
type: article
---

此时由于主动设置了 type,模板路径页随之变化,从 layouts/posts/list.html 变成 layouts/article/list.html,如果没设置,并且文章根目录为 content/,则默认 Type 为 page

Section:对于 .Kindsectiontaxonomyterm 的页面有效,用于更细粒度的模板控制,比如 /tags/hugo 对应的 Sectiontags,此时 Hugo 就会去找 layouts/tags/list.html(如果存在的话)

举个实际模板查找的例子

比如用户访问一个中文站点的首页(HTML 格式),并且没有设置 layout,此时 Hugo 会按照如下顺序查找模板

  • layouts/index.zh.html:Language + Kind 起作用
  • layouts/index.html:Kind 起作用
  • layouts/_default/index.html:回退到默认模板
  • themes/.../index.zh.html:查找主题下的模板
  • themes/.../index.html:查找主题下的首页
  • layouts/_default/list.html:最终兜底,因为首页 Home 属于 list page

OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog

相关推荐
Yana.nice3 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
2601_960567965 小时前
电商套图自动化效率的工程量化分析——从逐张生成到批量套图的架构演进
运维·架构·自动化
吳所畏惧6 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈6 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HiDev_7 小时前
【非标自动化】2、认识元器件(确定目标)
运维·自动化
Zhang~Ling7 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind7 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森7 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
中微极客8 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
久曲健的测试窝8 小时前
智能座舱自动化测试落地方案:数字仿真搭配实车实测,解决用例运维与场景失真难题
运维