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说得好。我已将您的评论包含在答案中,以提高可视性。