Pagination 运行时错误:分页时内存地址无效或无指针取消引用
我试图重新编写分页部分,但在编译时出错 目前我正在处理Pagination 运行时错误:分页时内存地址无效或无指针取消引用,pagination,hugo,Pagination,Hugo,我试图重新编写分页部分,但在编译时出错 目前我正在处理next和prev这样的问题 {{ if $paginator.HasNext }} <li class="page-item"> <a class="page-link" href="{{ $paginator.Next.URL }}"> <
next
和prev
这样的问题
{{ if $paginator.HasNext }}
<li class="page-item">
<a class="page-link" href="{{ $paginator.Next.URL }}">
<i class="fal fa-chevron-right fa-xs"></i>
</a>
</li>
{{ end }}
{{if$paginator.HasNext}
{{end}
我正在尝试修改它,这样如果没有页面,按钮将被禁用而不是隐藏
<li class="page-item {{ if eq $paginator.HasNext false }}disabled{{ end }}">
<a class="page-link" href="{{ $paginator.Next.URL }}">
<i class="fal fa-chevron-right fa-xs"></i>
</a>
</li>
但是我得到了错误
错误2020/09/07 03:31:55未能呈现页面:呈现“section”失败:执行模板失败:模板:section/post.html:22:5:在以下位置执行“main”:调用分部时出错:“../layouts/partials/pagination.html:75:56”:执行模板失败:模板:分部/pagination.html:75:56:执行“分部/pagination.html”at:调用URL:运行时错误:无效内存地址或零指针取消引用
完整片段
{{$paginator:=.paginator}
{{$相邻链接:=2}
{{$max_links:=(添加(mul$nextended_links 2)1)}
{{$下限:=(添加$相邻链接1)}
{{$上限:=(sub$paginator.TotalPages$相邻链接)}
{{如果gt$paginator.TotalPages 1}
{{/*First*/}
-
{{/*Prev*/}
{{if$paginator.HasPrev}
-
{{-end-}
{{/*第#*/}
{{range$paginator.Pagers}
{{$.Scratch.Set“page\u number\u flag”false}
{{if gt$paginator.TotalPages$max_links}
{{如果le$paginator.PageNumber$下限}
{{如果le.PageNumber$max_links}
{{$.Scratch.Set“page\u number\u flag”true}
{{end}
{{如果ge$paginator.PageNumber$上限}
{如果gt.PageNumber(sub$paginator.TotalPages$max_links)}
{{$.Scratch.Set“page\u number\u flag”true}
{{end}
{{else}
{{if and(ge.PageNumber(sub$paginator.PageNumber$相邻链接))(le.PageNumber(add$paginator.PageNumber$相邻链接))}
{{$.Scratch.Set“page\u number\u flag”true}
{{end}
{{end}
{{else}
{{$.Scratch.Set“page\u number\u flag”true}
{{end}
{{if eq($.Scratch.Get“page\u number\u flag”)true}
{{$isCurrent:=false}
{{如果等式$paginator}
{{$isCurrent=true}
{{end}
-
{{end}
{{end}
{{/*下一个*/}
{{if$paginator.HasNext}
-
{{end}
{{/*此处出错*/}
-
{{if$paginator.HasNext}
{{end}
{{/*Last*/}
-
{{end}
看着,我看到:
//HasNext测试当前页面之后是否有页面。
func(p*Pager)HasNext()bool{
返回p.PageNumber()
问题是你想要(我的):
如果没有页面,按钮将被禁用而不是隐藏
<li class="page-item {{ if eq $paginator.HasNext false }}disabled{{ end }}">
<a class="page-link" href="{{ $paginator.Next.URL }}">
<i class="fal fa-chevron-right fa-xs"></i>
</a>
</li>
所以p
很可能是nil
您的{{if gt$paginator.TotalPages 1}}
应该表示:没有剩余页面的地方。但是,对于测试,如果eq$paginator.PageNumber$paginator.TotalPages,则尝试使用
进行测试,并在这种情况下禁用该按钮
检查是否有更安全的方法进行相同的测试
OP在评论中指出:
我的问题是不理解编译器是如何工作的。
差不多
无法工作,因为在$paginator.Next.URL
为false
(最后一页)的场景中调用了$paginator.HasNext
我最后使用了一个{{else}
语句
最终解决方案:
<li class="page-item {{ if not $paginator.HasNext }}disabled{{- end -}}">
<a class="page-link"
href="{{ if $paginator.HasNext }}{{ $paginator.Next.URL }}{{- else -}}#{{- end -}}">
<i class="fal fa-chevron-right fa-xs"></i>
</a>
</li>
我的问题是在调用{{$paginator.Next.URL}
之前没有安全地进行检查,这导致在呈现最后一页时出现nil
。我认为我的问题是不理解编译器是如何工作的。类似于
的东西将不起作用,因为$paginator.Next.URL
在$paginator.HasNext
为false(最后一页)的场景中被调用。我最后使用了一个{{else}
语句。@lizzy91说得好。我已将您的评论包含在答案中,以提高可视性。