diff --git a/utils.go b/utils.go index 0afcb4ba..0ab108ff 100644 --- a/utils.go +++ b/utils.go @@ -195,6 +195,8 @@ func ParseForm(form url.Values, obj interface{}) error { var tag string if len(tags) == 0 || len(tags[0]) == 0 { tag = fieldT.Name + } else if tags[0] == "-" { + continue } else { tag = tags[0] } @@ -280,19 +282,23 @@ func RenderForm(obj interface{}) template.HTML { fieldT := objT.Field(i) tags := strings.Split(fieldT.Tag.Get("form"), ",") name := fieldT.Name - if len(tags) < 2 { - if len(tags) == 1 && len(tags[0]) > 0 { - name = tags[0] - } - raw = append(raw, fmt.Sprintf(`%v: `, - fieldT.Name, name, fieldV.Interface())) - } else { + fType := "text" + if len(tags) > 0 && tags[0] == "-" { + continue + } + + if len(tags) == 1 && len(tags[0]) > 0 { + name = tags[0] + } else if len(tags) >= 2 { if len(tags[0]) > 0 { name = tags[0] } - raw = append(raw, fmt.Sprintf(`%v: `, - fieldT.Name, name, tags[1], fieldV.Interface())) + if len(tags[1]) > 0 { + fType = tags[1] + } } + raw = append(raw, fmt.Sprintf(`%v: `, + fieldT.Name, name, fType, fieldV.Interface())) } return template.HTML(strings.Join(raw, "
")) } diff --git a/utils_test.go b/utils_test.go index 994846fe..22416ffe 100644 --- a/utils_test.go +++ b/utils_test.go @@ -104,8 +104,8 @@ func TestInSlice(t *testing.T) { func TestParseForm(t *testing.T) { type user struct { - Id int - tag string `form:tag` + Id int `form:"-"` + tag string `form:"tag"` Name interface{} `form:"username"` Age int `form:"age,text"` Email string @@ -114,6 +114,8 @@ func TestParseForm(t *testing.T) { u := user{} form := url.Values{ + "Id": []string{"1"}, + "-": []string{"1"}, "tag": []string{"no"}, "username": []string{"test"}, "age": []string{"40"}, @@ -148,10 +150,11 @@ func TestParseForm(t *testing.T) { func TestRenderForm(t *testing.T) { type user struct { - Id int - tag string `form:tag` + Id int `form:"-"` + tag string `form:"tag"` Name interface{} `form:"username"` Age int `form:"age,text"` + Sex string Email []string Intro string `form:",textarea"` } @@ -163,9 +166,9 @@ func TestRenderForm(t *testing.T) { } output = RenderForm(&u) result := template.HTML( - `Id:
` + - `Name:
` + + `Name:
` + `Age:
` + + `Sex:
` + `Intro: `) if output != result { t.Errorf("output should equal `%v` but got `%v`", result, output)