ホームページ > バックエンド開発 > Golang > Hugo で複数のセクションを条件付きでレンダリングする

Hugo で複数のセクションを条件付きでレンダリングする

WBOY
リリース: 2024-02-08 23:42:22
転載
969 人が閲覧しました

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

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}} &middot; {{.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 サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート