Maison > développement back-end > Golang > le corps du texte

Rendre conditionnellement plusieurs sections dans Hugo

WBOY
Libérer: 2024-02-08 23:42:22
avant
916 Les gens l'ont consulté

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

Dans Hugo, il existe une fonctionnalité très utile pour restituer plusieurs pièces en fonction des conditions. Cette fonctionnalité nous permet d'afficher/masquer certaines parties de la page en fonction de situations ou de conditions spécifiques. Que nous construisions un site Web statique ou un site Web dynamique, cette fonction de rendu conditionnel peut nous aider à contrôler de manière plus flexible la façon dont la page est présentée. Dans cet article, je vais discuter avec vous de la façon d'implémenter le rendu conditionnel de plusieurs pièces dans Hugo et de ses scénarios d'utilisation.

Contenu de la question

Je souhaite afficher tous les fichiers markdown dans chaque dossier, à l'exception des fichiers statiques de la page d'accueil du site Web. Une solution consiste à utiliser union dans Hugo, mais à mesure que le nombre de dossiers augmente, j'ai constaté que je suis. répéter l'union partout (le code avec union est commenté et cela fonctionne d'ailleurs), donc j'ai pensé qu'utiliser des tranches serait une meilleure idée, mais lorsque j'essaie d'utiliser des tranches, j'obtiens l'erreur suivante -

Échec du rendu de la page : "accueil" Échec du rendu : "(chemin du répertoire)layoutsindex.html:12:19" : échec de l'exécution du modèle à <.pages> : impossible d'évaluer la page de champ dans le type de chaîne

Structure des répertoires

code 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 }}
Copier après la connexion

Solution

https://www.php.cn/link/1330fef5fe4f742c1918c585c2da13b3:

Contexte (alias « point »)

Le concept le plus négligé à propos des modèles Go est {{ . }} de toujours faire référence au contexte actuel.

  • Au niveau supérieur du modèle, ce sera l'ensemble de données disponible pour le modèle à utiliser.
  • Cependant, à l'intérieur de l'itération, il aura la valeur de l'élément actuel dans la boucle c'est-à-dire que {{ . }} ne fera plus référence aux données disponibles pour toute la page.

Dans le code ci-dessous, .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 }}
                   ^^^^^^
Copier après la connexion

Une solution possible consiste à utiliser $. 访问全局上下文:.pages ==> $.pages.

Peut-être qu'une meilleure solution serait de répertorier la section des exclusions. Il n'est alors pas nécessaire de modifier le code lors de l'ajout de dossiers supplémentaires :

{{ define "main" }}
<ul class="homepage-topic-sections-container">
    {{ range where .Pages "Section" "!=" "static" }}
    <li>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!