恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Hugo 有序分类法(Ordered Taxonomy)元素方法详解:Count、Page、Pages、Term 与 WeightedPages

  • 首页
  • 资讯中心
  • /
  • Hugo 有序分类法(Ordered Taxonomy)元素方法详解:Count、Page、Pages、Term 与 WeightedPages

相关资讯

快速上手 superfile:终端文件管理器 5 分钟实战 2026/9/5 15:35:39
Oh-My-Posh主题字体乱码怎么修:一条命令装好Nerd Font的完整指南 2026/9/5 15:35:39
51单片机智能照明控制系统设计:从Proteus仿真到节能应用 2026/9/5 15:30:38

最新资讯

Rust构建Solana生产级套利机器人实战
5 分钟搞懂 pgvector 镜像标签:为什么 pg15 就是 pg15,一份新手快速上手指南
Spring AI实战:构建自然语言日历助手
回溯和贪心算法怎么学?从决策树剪枝到反悔贪心
ESP32 ADC高精度采集实战:从硬件优化到软件校准的完整方案
Windows 上手 faster-whisper:CUDA 12 加速语音转写实战

今日推荐

流式背压机制:避免前端渲染卡死与内存暴涨的滑动窗口限流
幂等性设计:在 Agent 自动重试与工具执行中的防重复扣费实战
向量检索与标量过滤混合查询:PostgreSQL pgvector 与 Milvus 的过滤下推实操

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

Hugo 有序分类法(Ordered Taxonomy)元素方法详解:Count、Page、Pages、Term 与 WeightedPages

发布时间:2026/9/5 15:35:39
Hugo 有序分类法(Ordered Taxonomy)元素方法详解:Count、Page、Pages、Term 与 WeightedPages Hugo 有序分类法Ordered Taxonomy元素方法详解Count、Page、Pages、Term 与 WeightedPages【免费下载链接】hugoThe world’s fastest framework for building websites.项目地址: https://gitcode.com/gh_mirrors/hu/hugoHugo 中分类法Taxonomy对象本质是一个 Go 的 map而 map 无法保持顺序因此 Hugo 提供了Alphabetical和ByCount两个方法将其转换为有序分类法——一个每个元素包含术语term及其加权页面weighted pages切片的有序列表。读完本文你将掌握有序分类法五个元素方法Count、Page、Pages、Term、WeightedPages的返回类型、用途与取舍并理解它们在 resources/page/taxonomy.go 与 resources/page/weighted.go 中的底层实现。什么是有序分类法在 Hugo 的数据模型中原始Taxonomy类型定义为一个 map如 resources/page/taxonomy.go 所示type Taxonomy map[string]WeightedPagesmap 在遍历时顺序不确定因此在模板中遍历分类法前需要先排序。调用Taxonomy对象的Alphabetical按键名排序或ByCount按页面数排序方法后得到的有序分类法ordered taxonomy是一个 slice其中每个元素是一个对象包含该术语及其加权页面切片。这一概念也与 术语表中的定义 一致有序分类法即一个 slice每个元素是一个包含 term 和其加权页面切片的对象。从源码结构看这个元素对应OrderedTaxonomyEntry结构体见 resources/page/taxonomy.go// OrderedTaxonomyEntry is similar to an element of a Taxonomy, but with the key embedded (as name) // e.g: {Name: Technology, WeightedPages: TaxonomyPages} type OrderedTaxonomyEntry struct { Name string WeightedPages }它把 map 的键以Name字段内嵌同时组合了WeightedPages切片——文档中描述的包含 term 和加权页面切片的对象正是这个结构。元素方法一览有序分类法切片中的每个元素提供以下五个方法完整文档见 ordered-taxonomy-element-methods.mdCount该术语下的页面数返回类型int用途返回分配到该术语的页面数量常用于显示3 篇文章这类计数标签。源码实现resources/page/taxonomy.go// Count returns the count the pages in this taxonomy. func (ie OrderedTaxonomyEntry) Count() int { return len(ie.WeightedPages) }可见它就是对内嵌WeightedPages切片取长度开销极低。Page术语页本身返回类型page.Page用途返回该术语对应的Page对象最典型的用途是链接到术语页。该方法继承自内嵌的WeightedPages类型见 resources/page/weighted.go// Page will return the Page (of Kind taxonomyList) that represents this set // of pages. This method will panic if p is empty, as that should never happen. func (p WeightedPages) Page() Page { ... return first.owner }WeightedPage结构体中持有一个未导出的owner字段指向所属的 taxonomy 页面它避免了每次调用都要做.Site.GetPage查询。从源码注释看这个间接引用方式是为了不破坏现有模板而采用的折中设计。Pages按分类法权重排序的 Pages 对象返回类型page.Pages用途返回包含分配到该术语的Page对象的Pages对象且按分类法权重taxonomic weight排序。实现resources/page/taxonomy.go只是对WeightedPages.Pages()的转发// Pages returns the Pages for this taxonomy. func (ie OrderedTaxonomyEntry) Pages() Pages { return ie.WeightedPages.Pages() }关键点在于Pages对象支持Sort、GroupBy、Where等 Pages 方法因此比WeightedPages更灵活。例如你可以按最后修改日期重新排序而不是沿用默认的权重顺序。Term术语名称返回类型string用途返回术语名即 map 键实现见 resources/page/taxonomy.go// Term returns the name given to this taxonomy. func (ie OrderedTaxonomyEntry) Term() string { return ie.Name }WeightedPages按权重排序的加权页面切片返回类型page.WeightedPages用途返回分配到该术语的加权页面切片按分类法权重排序。文档同时指出上面的Pages方法更灵活可以进一步排序和分组因此需要灵活处理时优先用Pages。WeightedPages的定义与排序规则在 resources/page/weighted.go// WeightedPages is a list of Pages with their corresponding (and relative) weight // [{Weight: 30, Page: *1}, {Weight: 40, Page: *2}] type WeightedPages []WeightedPages其比较逻辑weighted.go说明了按权重排序的确切含义func (wp WeightedPages) Less(i, j int) bool { if wp[i].Weight wp[j].Weight { return DefaultPageSort(wp[i].Page, wp[j].Page) } return wp[i].Weight wp[j].Weight }即先按权重值比较权重相同时回退到 Hugo 的默认页面排序。每个元素是WeightedPage结构体——一个带权重的 Pageweighted.go。模板实战遍历有序分类法以下示例继承自 get-a-taxonomy-object.md 的完整工作场景项目配置了两个分类法内容目录带有genres前端的书籍页面[taxonomies] genre genres author authorscontent/ ├── books/ │ ├── and-then-there-were-none.md -- genres: suspense │ ├── death-on-the-nile.md -- genres: suspense │ └── jamaica-inn.md -- genres: suspense, romance │ └── pride-and-prejudice.md -- genres: romance └── _index.md在任意模板中先通过Site对象的Taxonomies方法捕获Taxonomy对象再调用Alphabetical/ByCount得到有序分类法然后 range 遍历其元素并调用本文介绍的五个方法{{ $taxonomyObject : .Site.Taxonomies.genres.ByCount }} {{ range $taxonomyObject }} h2a href{{ .Page.RelPermalink }}{{ .Term }} ({{ .Count }})/a/h2 ul {{ range .Pages }} lia href{{ .RelPermalink }}{{ .LinkTitle }}/a/li {{ end }} /ul {{ end }}在 taxonomy 模板内部如layouts/taxonomy.html等价写法是用页面Data对象的Terms方法获取对象{{ $taxonomyObject : .Data.Terms }}调试数据结构的通用手段pre{{ debug.Dump $taxonomyObject }}/pre如果不经过Alphabetical/ByCount也可以直接 rangeTaxonomymap键为术语、值为加权页面切片渲染加权页面此时元素上同样可用.Page、.Term等但顺序是不确定的生产模板中推荐显式排序。排序机制的源码佐证ByCount的排序规则值得注意先按每键页面数降序数量相同时按键名升序resources/page/taxonomy.go// ByCount returns an ordered taxonomy sorted by # of pages per key. // If taxonomies have the same # of pages, sort them alphabetical func (i Taxonomy) ByCount() OrderedTaxonomy { count : func(i1, i2 *OrderedTaxonomyEntry) bool { li1 : len(i1.WeightedPages) li2 : len(i2.WeightedPages) if li1 li2 { return compare.LessStrings(i1.Name, i2.Name) } return li1 li2 } ... }Alphabetical则使用语言感知的排序器langs.GetCollator1对不同语言环境下的术语比较做了本地化处理taxonomy.go。两种排序最终都通过sort.Stable稳定排序执行taxonomy.go保证相等元素之间的顺序稳定。集成测试也验证了这些行为例如 hugolib/taxonomy_test.go 中的TestTaxonomiesCountOrder直接 range.ByCount()结果检查计数顺序TestTaxonomiesWeightSorttaxonomy_test.go验证加权页面排序TestTaxonomiesSpaceInName则在模板中 range.Data.Terms.ByCount检验含空格术语名的场景。参考与延伸阅读元素方法原始文档ordered-taxonomy-element-methods.md获取 Taxonomy 对象get-a-taxonomy-object.md术语表定义ordered-taxonomy.mdAlphabetical方法文档Alphabetical.mdByCount方法文档ByCount.md核心实现resources/page/taxonomy.go、resources/page/weighted.go集成测试hugolib/taxonomy_test.go【免费下载链接】hugoThe world’s fastest framework for building websites.项目地址: https://gitcode.com/gh_mirrors/hu/hugo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号