Hugo首页最新文章显示异常求助:位置错误或重复显示
Hugo自定义短代码显示文章重复/位置异常的解决方案
问题根源
你的问题大概率是主题模板内置了文章列表输出逻辑,和你自定义的短代码输出重复了。比如_index.md对应的列表模板(如layouts/index.html或layouts/_default/list.html)里,已经有循环输出文章的代码,导致要么模板的输出覆盖了短代码,要么两者同时输出造成重复。
解决步骤
1. 检查并修改主题列表模板
找到当前主题的列表模板文件(路径一般是themes/[你的主题名]/layouts/index.html或themes/[你的主题名]/layouts/_default/list.html),查找是否存在类似以下的代码段:
{{ range .Site.RegularPages.ByDate | first 5 }} <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> {{ end }}
如果有两种处理方式:
- 直接删除这段代码,只保留你通过短代码输出的文章列表;
- 给模板加个开关,通过页面前置元数据控制是否输出:
在_index.md的前置区添加参数:
然后修改模板代码:--- title: 首页 disable_default_posts: true ---{{ if not .Params.disable_default_posts }} {{ range .Site.RegularPages.ByDate | first 5 }} <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> {{ end }} {{ end }}
2. 修正短代码结构
确保你的短代码文件(layouts/shortcodes/post.html)结构完整,避免和页面其他内容冲突:
<ul class="latest-posts"> {{ range .Site.RegularPages.ByDate | first 5 }} <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> {{ end }} </ul>
用<ul>包裹列表项,避免样式混乱,同时确认短代码调用用{{< post >}}(输出纯HTML),不要用{{% post %}}(会解析Markdown)。
3. 调整模板渲染逻辑
如果主题模板是先渲染_index.md内容再追加默认文章列表,那你需要修改模板,把默认的文章列表逻辑移除,或者替换成短代码的调用。比如在模板中直接调用短代码,而不是写循环:
{{< post >}}
这样就不用在_index.md里重复调用了,位置也能完全由模板控制。
内容的提问来源于stack exchange,提问作者liam
相关产品推荐
相关产品推荐

