首頁  >  文章  >  後端開發  >  在 Hugo 中有條件地渲染多個部分

在 Hugo 中有條件地渲染多個部分

WBOY
WBOY轉載
2024-02-08 23:42:22901瀏覽

在 Hugo 中有条件地渲染多个部分

在Hugo中,有一個非常有用的功能,就是可以根據條件來渲染多個部分。這種功能可以使得我們根據特定的情況或條件來展示/隱藏頁面的某些部分。無論是在建立靜態網站還是動態網站中,這種條件渲染的功能都能夠幫助我們更靈活地控制頁面的呈現方式。在本文中,我將和大家一起探討如何在Hugo中實現條件渲染多個部分的方法及使用場景。

問題內容

我想渲染除網站主頁中的靜態檔案之外的每個資料夾中的所有markdown 文件,一種方法是在hugo 中使用union,但隨著資料夾數量的增加,我發現自己在重複union到處都是(帶聯合的程式碼被註釋了,順便說一下,它正在工作),所以我認為使用切片會是一個更好的主意,但是當我嘗試使用切片時,我收到以下錯誤-

渲染頁面失敗:「home」渲染失敗:「(目錄路徑)\layouts\index.html:12:19」:在6e63757d3e3244753a33bb4d3443b9a2 處執行範本失敗:無法評估字串類型中的欄位頁面

目錄結構

index.html 程式碼

{{ define "main" }}
<ul class="homepage-topic-sections-container">
    {{$sectionNames := slice "posts" "problems" "tutorials"}}
    {{range $index, $sectionName := $sectionNames}}
    {{ range where .Pages "Section" $sectionName }}
    {{/*
    {{ range union (union
    (where .Pages "Section" "posts")
    (where .Pages "Section" "problems"))
    (where .Pages "Section" "tutorials")
    }}
    */}}
    <li>
        <section class="homepage-topic-section">
            <h1 class="topic-heading"><a href="{{.Permalink}}">{{.Title}} </a></h1>
            <div>
                {{ range .Pages }}
                <h3><a href="{{.Permalink}}">{{.Title}} &middot; {{.Date.Format "January 2, 2006"}}</a></h3>
                {{ end }}
            </div>
        </section>
    </li>
    {{end}}
    {{end}}

</ul>
{{ end }}

解決方法

https://www.php.cn/link/1330fef5fe4f742c1918c585c2da13b3一个>:

上下文(又稱「點」)

關於 go 模板,最容易被忽略的概念是 {{ . }} 總是引用目前上下文

  • 在範本的頂層,這將是可供範本使用的資料集。
  • 但是,在迭代內部,它將具有循環中當前項目的值;即 {{ . }} 將不再引用整個頁面可用的資料。

在下面的程式碼中,.pages 中的點具有第一個 range 操作中目前項目的值。該值的類型是字串,並且它沒有欄位 pages。這就是為什麼它失敗了,execute of template failed at 6e63757d3e3244753a33bb4d3443b9a2: can'tvaluate field pages in type string.

{{ define "main" }}
<ul class="homepage-topic-sections-container">
    {{$sectionnames := slice "posts" "problems" "tutorials"}}
    {{range $index, $sectionname := $sectionnames}}
    {{ range where .pages "section" $sectionname }}
                   ^^^^^^

一種可能的修復方法是使用 $. 存取全域上下文:.pages ==> $.pages

也許更好的解決方案是列出排除部分。那麼當添加更多資料夾時就不需要修改程式碼了:

{{ define "main" }}
<ul class="homepage-topic-sections-container">
    {{ range where .Pages "Section" "!=" "static" }}
    <li>

以上是在 Hugo 中有條件地渲染多個部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除