在Hugo中,有一個非常有用的功能,就是可以根據條件來渲染多個部分。這種功能可以使得我們根據特定的情況或條件來展示/隱藏頁面的某些部分。無論是在建立靜態網站還是動態網站中,這種條件渲染的功能都能夠幫助我們更靈活地控制頁面的呈現方式。在本文中,我將和大家一起探討如何在Hugo中實現條件渲染多個部分的方法及使用場景。
我想渲染除網站主頁中的靜態檔案之外的每個資料夾中的所有markdown 文件,一種方法是在hugo 中使用union,但隨著資料夾數量的增加,我發現自己在重複union到處都是(帶聯合的程式碼被註釋了,順便說一下,它正在工作),所以我認為使用切片會是一個更好的主意,但是當我嘗試使用切片時,我收到以下錯誤-
渲染頁面失敗:「home」渲染失敗:「(目錄路徑)\layouts\index.html:12:19」:在<.pages> 處執行範本失敗:無法評估字串類型中的欄位頁面
目錄結構
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}} · {{.Date.Format "January 2, 2006"}}</a></h3> {{ end }} </div> </section> </li> {{end}} {{end}} </ul> {{ end }}
//m.sbmmt.com/link/1330fef5fe4f742c1918c585c2da13b3一个>:
關於 go 模板,最容易被忽略的概念是 {{ . }}
總是引用目前上下文。
{{ . }}
將不再引用整個頁面可用的資料。 在下面的程式碼中,.pages
中的點具有第一個 range
操作中目前項目的值。該值的類型是字串,並且它沒有欄位 pages
。這就是為什麼它失敗了,execute of template failed at <.pages>: 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中文網其他相關文章!