首頁 > 後端開發 > Golang > 主體

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

WBOY
發布: 2024-02-08 23:42:22
轉載
838 人瀏覽過

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

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

問題內容

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

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

目錄結構

index.html 程式碼

{{ define "main" }}
    {{$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") }} */}}
  • {{.Title}}

  • {{end}} {{end}}
{{ 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" }}
    {{$sectionnames := slice "posts" "problems" "tutorials"}} {{range $index, $sectionname := $sectionnames}} {{ range where .pages "section" $sectionname }} ^^^^^^
登入後複製

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

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

{{ define "main" }}
    {{ range where .Pages "Section" "!=" "static" }}
登入後複製

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

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!