Apabila bekerja dengan reka letak yang kompleks dalam aplikasi web, selalunya berguna untuk mencipta templat asas yang berfungsi sebagai asas untuk yang lain. muka surat. Dalam pakej html/template Go, ini boleh dicapai menggunakan arahan {{define}} dan {{template}}.
Pertimbangkan contoh berikut di mana anda mempunyai fail reka letak asas (base.html):
<!DOCTYPE html> <html lang="en"> <body> header... {{template "content" .}} footer... </body> </html>
Dan halaman berasingan (page1.html dan page2.html) yang menggunakan semula reka letak asas ini dengan tersuai mereka sendiri kandungan:
{{define "content"}} <div> <h1>Page1</h1> </div> {{end}} {{template "base.html"}}
{{define "content"}} <div> <h1>Page2</h1> </div> {{end}} {{template "base.html"}}
Isu yang anda hadapi ialah kedua-dua halaman 1 dan halaman 2 menggunakan HTML yang sama untuk pemaparan, yang ditakrifkan dalam page2.html. Untuk menangani perkara ini, kami perlu memastikan bahawa kedua-dua halaman mengisytiharkan dan menggunakan bahagian kandungan unik mereka sendiri dalam blok {{template}}.
Pendekatan yang lebih baik ialah mentakrifkan kandungan templat dalam fail berasingan, seperti yang ditunjukkan di bawah:
base.html:
{{define "base"}} <!DOCTYPE html> <html lang="en"> <body> header... {{template "content" .}} footer... </body> </html> {{end}}
halaman1.html:
{{define "content"}} I'm page 1 {{end}}
halaman2 .html:
{{define "content"}} I'm page 2 {{end}}
Dalam aplikasi anda, anda boleh menghuraikan kandungan dan asas fail templat ke dalam objek templat menggunakan template.New() dan ParseFiles(). Selepas itu, anda boleh membina HTML akhir dengan melaksanakan templat asas dengan konteks yang anda inginkan menggunakan ExecuteTemplate().
tmpl, err := template.New("").ParseFiles("page1.html", "base.html") // check your err err = tmpl.ExecuteTemplate(w, "base", yourContext)
Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan Templat Asas dalam pakej HTML/Templat Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!