Rendern Sie mehrere Abschnitte bedingt in Hugo

WBOY
Freigeben: 2024-02-08 23:42:22
nach vorne
952 Leute haben es durchsucht

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

In Hugo gibt es eine sehr nützliche Funktion zum Rendern mehrerer Teile basierend auf Bedingungen. Mit dieser Funktion können wir bestimmte Teile der Seite basierend auf bestimmten Situationen oder Bedingungen ein-/ausblenden. Unabhängig davon, ob wir eine statische oder eine dynamische Website erstellen, kann uns diese bedingte Rendering-Funktion dabei helfen, die Darstellung der Seite flexibler zu steuern. In diesem Artikel werde ich mit Ihnen besprechen, wie Sie das bedingte Rendern mehrerer Teile in Hugo und seine Verwendungsszenarien implementieren.

Frageinhalt

Ich möchte alle Markdown-Dateien in jedem Ordner mit Ausnahme der statischen Dateien auf der Homepage der Website rendern. Eine Möglichkeit besteht darin, Union in Hugo zu verwenden, aber mit zunehmender Anzahl von Ordnern habe ich festgestellt, dass dies der Fall ist Ich habe Union überall wiederholt (der Code mit Union ist auskommentiert und funktioniert übrigens), also dachte ich, die Verwendung von Slices wäre eine bessere Idee, aber wenn ich versuche, Slices zu verwenden, erhalte ich die folgende Fehlermeldung:

Seite konnte nicht gerendert werden: „home“ Rendering fehlgeschlagen: „(Verzeichnispfad)layoutsindex.html:12:19“: Ausführung der Vorlage unter <.pages> fehlgeschlagen: Feldseite im Zeichenfolgentyp konnte nicht ausgewertet werden

Verzeichnisstruktur

index.html-Code

{{ 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 }}
Nach dem Login kopieren

Lösung

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

Kontext (auch bekannt als „Punkt“)

Das am meisten übersehene Konzept bei Go-Vorlagen ist, dass sie immer auf den aktuellen Kontext verweisen. {{ . }} Auf der obersten Ebene der Vorlage ist dies der Datensatz, der für die Verwendung durch die Vorlage verfügbar ist.

  • Innerhalb der Iteration hat es jedoch den Wert des aktuellen Elements in der Schleife
  • , d. h.
  • bezieht sich nicht mehr auf die für die gesamte Seite verfügbaren Daten. {{ . }}Im Code unten,
  • .
{{ define "main" }}
<ul class="homepage-topic-sections-container">
    {{$sectionnames := slice "posts" "problems" "tutorials"}}
    {{range $index, $sectionname := $sectionnames}}
    {{ range where .pages "section" $sectionname }}
                   ^^^^^^
Nach dem Login kopieren

Eine mögliche Lösung ist die Verwendung von .pages 中的点具有第一个 range 操作中当前项目的值。该值的类型是字符串,并且它没有字段 pages。这就是为什么它失败了,execute of template failed at <.pages>: can'tvaluate field pages in type string.

Vielleicht wäre es eine bessere Lösung, den Abschnitt „Ausschlüsse“ aufzulisten. Dann muss der Code beim Hinzufügen weiterer Ordner nicht geändert werden: $. 访问全局上下文:.pages ==> $.pages

{{ define "main" }}
<ul class="homepage-topic-sections-container">
    {{ range where .Pages "Section" "!=" "static" }}
    <li>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonRendern Sie mehrere Abschnitte bedingt in Hugo. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage