如果值为 0 则输入值为空,否则值为

问题: 我创建了一个简单的表单,其中有一个输入字段“num”。提交后,我想在同一个输入字段中显示 num 的值,换句话说,要保留该字段中的输入。如果该值设置为 0,那么我想忽略它。


我可以用多种语言完成,但我不确定如何在 Golang 中完成。我当前的模板文件有,


<input type="text" placeholder="foo" name="bar" value="{{if gt .N 0 }} {{.N}} {{end}} "/> 

服务器文件包含:


data := &listOfReport {

        R: r,

        I: i,

        N: n

}

listTmpl := template.Must(template.New("list_tmpl").Parse(string(report.Template["xxx.tmpl"])))

if err := listTmpl.Execute(w, data); err != nil {

    http.Error(w, fmt.Sprintf("Error rendering template %v", err), 500)

}

另一个想法是使 N 成为字符串,因此在服务器文件中将其设为 '' 或值。但这实际上破坏了变量的名称/目的。


有没有更好的方法来做到这一点?有没有更好的方法可以直接从模板访问 GET 参数?请注意,N 的值最初是从 GET 变量中获取的。



繁花不似锦
浏览 299回答 2
2回答

PIPIONE

没有标准/内置方法可以从模板中获取任何请求参数,您必须将其放入数据中。(您可以编写一个为您执行此操作的函数,但这会导致丑陋的 hack。)我不明白你的解决方案有什么问题。

Helenr

我采取类似的方法,但使用结构。type SignupForm struct {&nbsp; &nbsp; Name string&nbsp; &nbsp; Email string&nbsp; &nbsp; Etcera bool}// Type aliastype M map[string]interface{}...// In the handler that accepts your formerr := r.ParseForm()if err != nil {&nbsp; &nbsp; // handle error}signup := SignupForm{}err := decoder.Decode(signup, r.PostForm)if err != nil {&nbsp; &nbsp; // handle error}// Store the 'saved' form contents somewhere temporary -&nbsp;// e.g.//&nbsp; - cookies (keep in mind the 4K browser limit)//&nbsp; - server side sessions (Redis; how I do it)//&nbsp; - db// In the handler that renders your formerr := template.ExecuteTemplate(w, "form.html", M{&nbsp; &nbsp; &nbsp; &nbsp; "form": signup,&nbsp; &nbsp; &nbsp; &nbsp; "csrfToken": csrfToken,&nbsp; &nbsp; &nbsp; &nbsp; // and so on...&nbsp; &nbsp; &nbsp; &nbsp; })请注意,无论您在何处存储表单数据,都要确保它是临时的。服务器端会话是理想的,因为您可以让它们过期(如果您不想手动删除它们)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go