为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁花不似锦 2021-09-27 10:37:31
问题: 我创建了一个简单的表单,其中有一个输入字段“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 变量中获取的。
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

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

我不明白你的解决方案有什么问题。


查看完整回答
反对 回复 2021-09-27
?
Helenr

TA贡献1780条经验 获得超4个赞

我采取类似的方法,但使用结构。


type SignupForm struct {

    Name string

    Email string

    Etcera bool

}


// Type alias

type M map[string]interface{}


...


// In the handler that accepts your form

err := r.ParseForm()

if err != nil {

    // handle error

}


signup := SignupForm{}

err := decoder.Decode(signup, r.PostForm)

if err != nil {

    // handle error

}


// Store the 'saved' form contents somewhere temporary - 

// e.g.

//  - cookies (keep in mind the 4K browser limit)

//  - server side sessions (Redis; how I do it)

//  - db


// In the handler that renders your form

err := template.ExecuteTemplate(w, "form.html", M{

        "form": signup,

        "csrfToken": csrfToken,

        // and so on...

        })

请注意,无论您在何处存储表单数据,都要确保它是临时的。服务器端会话是理想的,因为您可以让它们过期(如果您不想手动删除它们)。


查看完整回答
反对 回复 2021-09-27
  • 2 回答
  • 0 关注
  • 298 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信