使用 Go html/template 功能和自定義 FuncMap。如果表單中存在帶有 checkName 的復選框,則我定義的自定義函式“isChecked(checkName string, form url.Values)”回傳字串“checked”,如果不存在則回傳空白字串。它作業正常,但奇怪的是在未選中復選框的完整 HTML 上,我看到字串“ZgotmplZ”根本不應該有字串。這是設定 FuncMap 的 main.go 程式:
package main
import (
"fmt"
"html/template"
"log"
"net/http"
"net/url"
)
var tpl *template.Template
func init() {
tpl = template.Must(template.New("").Funcs(fm).ParseFiles("templates/check-box.html"))
}
var fm = template.FuncMap{
"isChecked": isChecked,
}
func isChecked(checkName string, form url.Values) string {
if form.Has(checkName) {
return "checked"
}
return ""
}
func checkboxHandler(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
log.Fatalln(err)
}
err = tpl.ExecuteTemplate(w, "check-box.html", r.Form)
if err != nil {
log.Fatalln(err)
}
}
func main() {
http.HandleFunc("/checkbox/", checkboxHandler)
err := http.ListenAndServe(":8080", nil)
}
這是模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Checkbox Control</title>
</head>
<body>
<h1>Go html/template Form Handling - Checkbox</h1>
<div>
Form Data: {{.}}
</div>
<form action="/checkbox/" method="POST">
<div>
<label for="checkbox">Check Box</label>
<input type="checkbox" name="check1" id="checkbox" value="check1" {{isChecked "check1" .}}>Check 1
<input type="checkbox" name="check2" id="checkbox" value="check2" {{isChecked "check2" .}}>Check 2
<input type="checkbox" name="check3" id="checkbox" value="check3" {{isChecked "check3" .}}>Check 3
</div>
<div>
<button type="submit">Submit</button>
</div>
</form>
</body>
</html>
提交表單并選中復選框的結果很好。但是當我檢查源代碼時,對于未選中的復選框,我得到了這個有趣的字串“ZgotmplZ”(換句話說,FuncMap 中的自定義函式似乎沒有為未選中的復選框回傳空白字串):
<div>
<label for="checkbox">Check Box</label>
<input type="checkbox" name="check1" id="checkbox" value="check1" checked>Check 1
<input type="checkbox" name="check2" id="checkbox" value="check2" ZgotmplZ>Check 2
<input type="checkbox" name="check3" id="checkbox" value="check3" ZgotmplZ>Check 3
</div>
還想知道是否有人對如何將復選框“選中”狀態傳播到 html 模板有其他建議。
謝謝!
uj5u.com熱心網友回復:
模板發出 ZgotmplZ 因為它不喜歡屬性背景關系中的空字串。通過執行以下操作進行修復。
從 isChecked 回傳 bool:
func isChecked(checkName string, form url.Values) bool {
return form.Has(checkName)
}
在模板中使用 if 操作:
{{if isChecked "check1" .}}checked{{end}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/520346.html
標籤:形式去去模板文本模板
上一篇:來自洪流公告的奇怪“同行”欄位
