/ / HTML Templating With Go

HTML Templating With Go

Khi bạn đang xây dựng một trang web, bạn thường sẽ tạo động một số nội dung cuối cùng của mình. Sau đó, bạn sẽ muốn đưa dữ liệu đó vào các trang web cuối cùng của mình để hiển thị trong trình duyệt.

Bạn có thể thực hiện một trong hai cách tiếp cận: nhúng cấu trúc trang vào chương trình của bạn hoặc kết hợp dữ liệu cuối cùng của bạn với các tệp mẫu riêng biệt.

LÀM VIDEO TRONG NGÀY

Templating cung cấp sự tách biệt các mối quan tâm để có một cơ sở mã dễ bảo trì hơn. Nó cũng giúp dễ dàng phân chia các nhiệm vụ front-end và back-end, phân bổ chúng cho các thành viên khác nhau trong nhóm. Go có hỗ trợ tạo khuôn mẫu tuyệt vời trong thư viện tiêu chuẩn của nó.

Bắt đầu với Templating trong Go

Go có hai gói tạo khuôn mẫu trong thư viện chuẩn: văn bản / mẫuhtml / mẫu. Gói văn bản / mẫu có chức năng phân tích cú pháp tệp văn bản, trong khi html / mẫu xử lý HTML. Bằng cách sử dụng html / template, bạn sẽ được bảo vệ khỏi các cuộc tấn công tạo script trên nhiều trang web (XSS) vì Go thoát khỏi mục nhập dữ liệu trong quá trình hiển thị. Đây là một lợi thế khác của việc tạo khuôn mẫu so với cách tiếp cận thủ công.


Vì gói mẫu là một phần của thư viện chuẩn, bạn sẽ không cần cài đặt bất kỳ phần phụ thuộc nào; chỉ cần nhập nó:

import "html/template"

Bắt đầu bằng cách tạo một tệp HTML để sử dụng làm mẫu cho ứng dụng của bạn. Bạn có thể sử dụng tiêu chuẩn .html phần mở rộng hoặc một trong hai .gohtml hoặc .tmpl, cả hai đều phổ biến. Bất kỳ tiện ích mở rộng nào bạn sử dụng, chức năng trong ứng dụng của bạn sẽ giống nhau. Một số trình soạn thảo văn bản có thể áp dụng tô sáng cú pháp khác nhau tùy thuộc vào phần mở rộng mẫu của bạn. Đây là một khung cơ bản:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>

</body>
</html>

Lưu tệp này trong thư mục chương trình Go của bạn. Bây giờ bạn có thể bắt đầu làm việc với nó, như một mẫu, trong chương trình của bạn.

Tạo một phiên bản chung của Mẫu phương pháp của gói mẫu. Bạn sẽ truy cập phiên bản mẫu này từ các phần khác nhau trong chương trình của mình.

var tmplt *template.Template

Bạn sẽ phải tạo một máy chủ đơn giản để kết xuất và hiển thị các mẫu của mình. Đây là cách khởi động một máy chủ đơn giản trong Go bằng cách sử dụng net / http bưu kiện:

func runServer() {
http.HandleFunc("/home", handlePage)
err := http.ListenAndServe("localhost:8080", nil)

if err != nil {
log.Fatalln("There's an error with the server:", err)
}
}

Bạn sẽ gọi runServer từ chức năng chính của bạn để khởi động máy chủ. Máy chủ chỉ có một tuyến đường, /Trang Chủ tuyến đường, sẽ hiển thị trang của bạn. Các xử lý tham số là tên của một hàm xử lý sẽ hiển thị trang của bạn. Các ListenAndServe phương pháp khởi động máy chủ đang lắng nghe trên cổng 8080 trên localhost, tức là máy tính của riêng bạn.


Chuyển các biến vào mẫu

Tạo một cấu trúc chung có tên Tin tức:

type News struct {
Headline string
Body string
}

Bạn sẽ sử dụng cấu trúc này để lưu trữ dữ liệu và chuyển nó vào mẫu của bạn để hiển thị trên trang cuối cùng của bạn. Trong mẫu của bạn, sau đó bạn có thể sử dụng cú pháp này để đưa dữ liệu vào:

{{ name }}

Ở đâu Tên là tên của một biến mà bạn đã chuyển vào mẫu của mình. Khi bạn hiển thị mẫu, nó sẽ thay thế các giá trị trong dấu ngoặc nhọn bằng dữ liệu tương ứng từ mã Go của bạn. Vì ví dụ sau sẽ chuyển một cấu trúc, bạn sẽ sử dụng ký hiệu dấu chấm để truy cập các trường của nó:

<body>
<h1>{{ .Headline }}</h1>
<p> {{ .Body }} </p>
</body>

Thay thế phần tử nội dung trống trong đánh dấu khung của mẫu của bạn bằng mã ở trên.

Các xử lý hàm xử lý sẽ xác minh rằng yêu cầu cho trang là một yêu cầu GET. Sau đó, nó điền vào một cấu trúc với dữ liệu mẫu trước khi hiển thị mẫu và phân phát trang cuối cùng:

func handlePage(writer http.ResponseWriter, request *http.Request) {
if request.Method == "GET" {
tmplt, _ = template.ParseFiles("tutorial.html")

event := News{
Headline: "smartreviewaz.com has everything Tech",
Body: "Visit MUO for anything technology related",
}

err := tmplt.Execute(writer, event)

if err != nil {
return
}
}
}

Các ParseFiles phương thức phân tích cú pháp tệp HTML mà bạn chỉ định. Các Sự kiện biến là cấu trúc được khởi tạo. Các Hành hình phương thức sẽ đưa dữ liệu được cung cấp vào trang cuối cùng, theo chỗ dành sẵn trong mẫu. Thực thi mất một ResponseWriter và dữ liệu, trong trường hợp này, là cấu trúc.

Đây là kết quả từ việc chạy máy chủ và truy cập trang:

Sử dụng cấu trúc điều khiển trong mẫu

Bạn cũng có thể sử dụng cấu trúc điều khiển như câu lệnh điều kiện và vòng lặp trong các mẫu của mình.

Một vòng lặp cho phép bạn xuất ra một số giá trị và sử dụng lại cùng một cấu trúc cho mỗi giá trị. Sử dụng phạm vi từ khóa để xác định phần đầu của nội dung lặp lại và chấm dứt từ khóa cho cuối cùng. Trong vòng lặp, bạn có thể sử dụng {{.}} cú pháp để nhập giá trị hiện tại:

<ol>
{{range .}}
<li>{{.}}</li>
{{end}}
</ol>

Sau đó, bạn sẽ chuyển tên của cấu trúc dữ liệu mà bạn muốn lặp qua làm tham số cho phương thức Execute:

makeUseOfCategories := []string{"Technology Explained", "Programming", "Linux",
"Android", "iOS", "Many More................"}

err := tmplt.Execute(writer, makeUseOfCategories)

if err != nil {
return
}

Các makeUseOfCategories biến là một phần của chuỗi để truyền làm tham số dữ liệu. Đây là kết quả của việc lặp qua lát cắt:

Bạn có thể sử dụng một câu lệnh điều kiện trong các mẫu của mình để kiểm tra giá trị của một biến boolean. Tạo một cấu trúc với các trường boolean, như sau:

type TrueFalser struct {
IsTrue bool
IsFalse bool
IsDefault bool
}

Để sử dụng một điều kiện, hãy bao gồm nếu từ khóa trong dấu ngoặc kép trước tên của biến cần kiểm tra. Kết thúc khối điều kiện bằng chấm dứt từ khóa trong dấu ngoặc nhọn:

{{if .IsTrue}}
<p>Evaluates true and will output</p>
{{end}}

{{if .IsDefault}}
<p>Evaluates false and won't output</p>
{{end}}

{{if .IsFalse}}
<p>Evaluates false and won't output</p>
{{end}}

Khởi tạo một cấu trúc trong Go đặt các giá trị thành false theo mặc định, vì vậy nếu bạn không khởi tạo một trường, nó sẽ đánh giá thành false. Khi khởi tạo cấu trúc và chuyển biến dưới dạng dữ liệu vào mẫu, chỉ các trường đánh giá là nguyên nhân thực sự mới xuất hiện.

choice := TrueFalser {
IsTrue: true,
IsFalse: false,
}

err := tmplt.Execute(writer, choice)

Kết quả cuối cùng chỉ bao gồm một đoạn văn vì chỉ trường isTrue đánh giá là true:

Bạn không cần phải sử dụng mẫu cho các ứng dụng phụ trợ của mình

Tạo khuôn mẫu không phải là yêu cầu đối với các ứng dụng Go của bạn. Bạn có thể sử dụng các cách tiếp cận khác như nhúng cấu trúc trang vào chương trình của mình, cùng với logic và hành vi khác của nó.

Tuy nhiên, cuối cùng bạn sẽ phải kiếm nhiều việc hơn cho chính mình. Go templating giúp ngăn chặn các cuộc tấn công XSS và giúp tách công việc trên cấu trúc trang khỏi logic phụ trợ dễ dàng hơn.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *