Heim  >  Artikel  >  Backend-Entwicklung  >  Rendern Sie mehrere Abschnitte bedingt in Hugo

Rendern Sie mehrere Abschnitte bedingt in Hugo

WBOY
WBOYnach vorne
2024-02-08 23:42:22901Durchsuche

在 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 6e63757d3e3244753a33bb4d3443b9a2 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 }}

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 }}
                   ^^^^^^

Eine mögliche Lösung ist die Verwendung von .pages 中的点具有第一个 range 操作中当前项目的值。该值的类型是字符串,并且它没有字段 pages。这就是为什么它失败了,execute of template failed at 6e63757d3e3244753a33bb4d3443b9a2: 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>

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen