Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Buat berbilang bahagian dalam Hugo secara bersyarat

Buat berbilang bahagian dalam Hugo secara bersyarat

WBOY
WBOYke hadapan
2024-02-08 23:42:22901semak imbas

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

Di Hugo, terdapat ciri yang sangat berguna untuk menghasilkan berbilang bahagian berdasarkan syarat. Ciri ini membolehkan kami menunjukkan/menyembunyikan bahagian tertentu halaman berdasarkan situasi atau keadaan tertentu. Sama ada kami membina tapak web statik atau tapak web dinamik, fungsi pemaparan bersyarat ini boleh membantu kami mengawal cara halaman itu dipersembahkan dengan lebih fleksibel. Dalam artikel ini, saya akan membincangkan dengan anda cara melaksanakan pemaparan bersyarat bagi berbilang bahagian dalam Hugo dan senario penggunaannya.

Kandungan soalan

Saya ingin memaparkan semua fail penurunan harga dalam setiap folder kecuali fail statik di halaman utama tapak web Salah satu cara ialah menggunakan kesatuan dalam hugo, tetapi apabila bilangan folder bertambah, saya mendapati bahawa saya mengulangi kesatuan di seluruh tempat (kod dengan kesatuan diulas, dan ia berfungsi dengan cara), jadi saya fikir menggunakan kepingan akan menjadi idea yang lebih baik, tetapi apabila saya cuba menggunakan kepingan saya mendapat Ralat berikut-

Gagal untuk memaparkan halaman: "home" Rendering gagal: "(directory path)layoutsindex.html:12:19": Pelaksanaan templat di 6e63757d3e3244753a33bb4d3443b9a2 gagal: Tidak dapat menilai halaman medan dalam jenis rentetan

Struktur direktori

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

Penyelesaian

https://www.php.cn/link/1330fef5fe4f742c1918c585c2da13b3一个>:

Konteks (aka “titik”)

Konsep yang paling diabaikan tentang templat go ialah {{ . }} sentiasa merujuk konteks semasa.

  • Di peringkat atas templat, ini akan menjadi set data yang tersedia untuk digunakan templat.
  • Walau bagaimanapun, di dalam lelaran, ia akan mempunyai nilai item semasa dalam gelung iaitu {{ . }} tidak akan merujuk kepada data yang tersedia untuk keseluruhan halaman.

Dalam kod di bawah, .pages 中的点具有第一个 range 操作中当前项目的值。该值的类型是字符串,并且它没有字段 pages。这就是为什么它失败了,execute of template failed at 6e63757d3e3244753a33bb4d3443b9a2: 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 }}
                   ^^^^^^

Satu pembaikan yang mungkin adalah dengan menggunakan $. 访问全局上下文:.pages ==> $.pages.

Mungkin penyelesaian yang lebih baik adalah dengan menyenaraikan bahagian pengecualian. Kemudian tidak perlu mengubah suai kod apabila menambah lebih banyak folder:

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

Atas ialah kandungan terperinci Buat berbilang bahagian dalam Hugo secara bersyarat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam