模板文件中的Golang重定向功能失败

时间:2015-07-17 10:58:21

标签: go

正如golang文档所述,模板函数必须至少有1个返回参数,所以我想我可以排除模板函数。

所以我想我可以直接在Content模型上创建函数,但我猜不是吗?

我认为下面的标记非常自我解释(根文件夹中的index.tmpl文件):

{{$request := .Request}}
{{$response := .Response}}
{{if eq $request.Method "POST"}}
    {{.Redirect "page1" 301}}
{{end}}

<!DOCTYPE html>
<html>
  <head>
    <title>{{.Title | title}}</title>
  </head>
  <body>
    <h1>{{.Title}}</h1>
    {{.Body}}
    <p>{{.ContentType}}</p>
    <p>{{$request}}</p>
    <p>{{lol}}</p>
    <form method="POST">
        <input type="text" name="lolcat"/>
        <input type="submit" value="submit"/>
    </form>
  </body>
</html>

这有点像人们如何在ASP.Net/Razor中做到这一点,但它不起作用。

其余代码在http://play.golang.org/p/LMKdflA9RS

要在本地测试程序,您需要:

main.go
index.tmpl
page1.tmpl (just use the same as index.tmpl)

我做错了什么,怎么能实现? : - )

解决方案:

http://play.golang.org/p/b2I_uzjiSH

感谢Ainar-G!

1 个答案:

答案 0 :(得分:6)

像这样的逻辑应该进入处理程序。模板仅用于呈现数据。它们不是为了更多而设计的。关于什么以及如何渲染的任何决定都应该在处理程序代码中完成。

考虑到这一点,以下是您如何做到这一点:http://play.golang.org/p/Md5A54rLm7

您无法直接写入w,因为这会导致它将响应代码设置为200.您还应该在包装器中注册redirect函数,因为所有模板函数都必须返回一个或两个(有错误)值。再一次,只因为你可以,这并不意味着你应该。