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

Hugo中遍历字符串切片调用.Site.GetPage时类型错误的解决咨询

Hugo中遍历字符串切片调用.Site.GetPage时类型错误的解决咨询

嗨,我来帮你搞定这个问题!你遇到的这个错误其实很好理解:当你进入range $array循环后,模板里的.已经不再是原来的页面上下文了——它变成了当前循环到的那个字符串(比如"foo"、"bar"),而字符串类型里根本没有.Site这个属性,所以才会报错说“无法在string类型中评估Site字段”。

解决方法很简单,只要在循环开始前把原来的.Site上下文存成一个变量,在循环里用这个变量来调用GetPage就可以了,具体修改如下:

{{ $array := slice "foo" "bar" "bam" }}
{{/* 先把循环外的Site上下文存到变量里 */}}
{{ $site := .Site }}

{{ range $array }}
  {{ $imgStr := printf "images/%s.jpg" . }}
  {{ $img := resources.Get $imgStr }}
  {{ $imgSrc := $img.RelPermalink }}

  {{/* 用提前保存的$site变量来调用GetPage,当前的`.`还是循环的字符串元素 */}}
  {{ with $site.GetPage . }}
    <h1>{{ .Title }}</h1>
    <img src="{{ $imgSrc }}">
    <p>{{ .Content }}</p>
  {{ end }}
{{ end }}

另外我帮你简化了$imgStr的拼接,用一个printf就搞定了,比原来多层嵌套更简洁~

还要提醒你一句:如果你的字符串只是页面的slug(比如"foo"),可能需要给GetPage指定页面类型,比如写成$site.GetPage "page" .或者$site.GetPage "posts" .,具体要看你的站点内容结构,确保能正确匹配到对应的页面。

备注:内容来源于stack exchange,提问作者foxgroot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:53:01