You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hugo首页代码重复渲染同一分区内容问题排查

问题原因及解决办法

问题根源

你遇到的问题是因为Hugo的.Paginate方法会修改当前页面的全局分页状态:第一次调用.Paginate $post_pages后,页面的Paginator变量被设置为posts的分页对象;第二次调用.Paginate $project_pages时,Hugo会复用这个已有的分页状态,导致结果不符合预期。调换代码顺序后,全局状态被第二个分区覆盖,所以两个区块都显示第二个分区的内容。

解决方法

方法1:直接展示固定数量的条目(无需分页)

如果首页不需要给两个分区单独做分页,直接取前N条内容即可,避免调用.Paginate:

{{ define "main" }}
    <div class="homepage-content">
        {{ .Content }}
    </div>

    <h1>Blog Posts:</h1>
    <div class="articles">
        {{ $post_pages := where (where site.RegularPages "Section" "posts") "Params.hidden" "!=" true }}
        {{ range first 5 $post_pages }} <!-- 取前5条,可按需修改数量 -->
            {{ partial "post-summary.html" . }}
        {{ end }}
    </div>

    <h1>Projects:</h1>
    <div class="articles">
        {{ $project_pages := where (where site.RegularPages "Section" "projects") "Params.hidden" "!=" true }}
        {{ range first 5 $project_pages }}
            {{ partial "post-summary.html" . }}
        {{ end }}
    </div>
{{ end }}

注:用site.RegularPages代替site.Pages更准确,因为它只包含常规内容页面(排除首页、分类页等);同时用Section判断比Type更直接对应content下的文件夹。

方法2:使用独立分页对象(保留分页功能)

如果需要给两个分区单独做分页,要用Hugo的paginate函数(小写,不是方法)生成独立的分页对象,避免修改全局状态:

{{ define "main" }}
    <div class="homepage-content">
        {{ .Content }}
    </div>

    <h1>Blog Posts:</h1>
    <div class="articles">
        {{ $post_pages := where (where site.RegularPages "Section" "posts") "Params.hidden" "!=" true }}
        {{ $post_paginator := paginate $post_pages }} <!-- 生成独立的分页对象 -->
        {{ range $post_paginator.Pages }}
            {{ partial "post-summary.html" . }}
        {{ end }}
        {{ partial "pagination.html" $post_paginator }} <!-- 传入独立分页对象 -->
    </div>

    <h1>Projects:</h1>
    <div class="articles">
        {{ $project_pages := where (where site.RegularPages "Section" "projects") "Params.hidden" "!=" true }}
        {{ $project_paginator := paginate $project_pages }}
        {{ range $project_paginator.Pages }}
            {{ partial "post-summary.html" . }}
        {{ end }}
        {{ partial "pagination.html" $project_paginator }}
    </div>
{{ end }}

需要同步修改pagination.html,让它支持接收传入的分页对象参数:

<!-- 修改pagination.html -->
{{ $paginator := . }}
<!-- 原分页逻辑不变,将所有.Paginator替换为$paginator即可 -->

额外优化建议

  • 可以把重复的筛选逻辑抽成局部模板或全局变量,减少代码冗余
  • params里的mainSections设置不影响当前问题的核心逻辑,无需调整

内容的提问来源于stack exchange,提问作者Hayden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:50:21