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

时间:2015-03-24 07:36:05

标签: go

问题: 我创建了一个简单的表单,其中有一个输入字段" 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成为一个字符串,以便使它成为&#39;&#39;或服务器文件中的值。但这实际上破坏了变量的名称/目的。

有没有更好的方法呢?有没有更好的方法直接从模板访问GET参数?请注意,N的值最初来自GET变量。

*此代码未经过测试

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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...
        })

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