Hugo には、条件に基づいて複数のパーツをレンダリングできる非常に便利な機能があります。この機能を使用すると、特定の状況や条件に基づいてページの特定の部分を表示/非表示にすることができます。静的な Web サイトを構築する場合でも、動的な Web サイトを構築する場合でも、この条件付きレンダリング機能を使用すると、ページの表示方法をより柔軟に制御できます。この記事では、Hugo で複数のパーツの条件付きレンダリングを実装する方法とその使用シナリオについて説明します。
Webサイトのトップページにある静的ファイルを除く、各フォルダー内のすべてのマークダウンファイルをレンダリングしたいのですが、hugoでunionを使う方法がありますが、フォルダー数がが増加し、どこでもユニオンを繰り返していることに気づきました(ユニオンを含むコードはコメントアウトされており、ちなみに機能しています)。そのため、スライスを使用する方が良い考えだと思いましたが、スライスを使用しようとすると、次のエラーが発生します。
ページのレンダリングに失敗しました: "ホーム" のレンダリングに失敗しました: "(ディレクトリ パス)\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
はありません。それが失敗の理由です。テンプレートの実行が <.pages> で失敗しました: string 型のフィールド ページを評価できません
.
考えられる修正の 1 つは、$.
を使用してグローバル コンテキストにアクセスすることです: .pages
==> $.pages
。
おそらく、より良い解決策は、除外セクションをリストすることです。これにより、フォルダーを追加するときにコードを変更する必要がなくなります。 リーリー
以上がHugo で複数のセクションを条件付きでレンダリングするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。