go - 直接从 Revel 模板引擎中拉取模型

标签 go template-engine revel

我来自 Ruby/PHP 背景,通常我使用直接从 View 中拉取模型而无需 Controller ,例如在 erb 中文件:

<script>
  var vm = {
    rows: <%= ModelName.rows.to_json %>
  };
  // render vm.rows using client-side javascript
</script>
<div> 
  bla bla
</div>

是否可以像我在 erb 中所做的那样,在 Go/Revel 的模板中拉取模型?

最佳答案

这种将代码直接嵌入到模板中的方法只能使用解释型语言(例如 Ruby 和 PHP)来完成。 Go 模板包支持一些简单的指令(if、else、range 等 - 请参阅 here 了解详细信息)但这种语法并不接近完整的脚本语言 - 这可能也不是预期的。您可以调用诸如 to_json 之类的方法来自模板的方法。然而(正如 twotwotwo 正确指出的那样)你甚至可能不需要额外的方法来将你的数据转换为 JSON - 如果你将它放在 <script> 之间标签,Go 会自己进行转换。要自定义转换,请实现​​ Marshaler通过提供 MarshalJSON 接口(interface)描述的方法here .

以下示例演示了在“脚本”上下文中并使用方法直接输出结构:

package main

import (
    "html/template"
    "log"
    "os"
    "strings"
)

type Greeter struct {
    Repeat     int
    Salutation string
}

func (g Greeter) Perform() string {
    return strings.Repeat(g.Salutation+" ", g.Repeat)
}

func main() {
    sayHi := Greeter{Repeat: 3, Salutation: "Hi!"}
    tmpl, err := template.New("").Parse("{{.}}\n<script>{{.}}</script>\n{{.Perform}}")
    if err != nil {
        log.Fatalf("Parse: %v", err)
    }
    tmpl.Execute(os.Stdout, sayHi)
}

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

输出:

{3 Hi!}
<script>{"Repeat":3,"Salutation":"Hi!"}</script>
Hi! Hi! Hi!

Revel 建立在 Go 模板包之上,而不是实现自己的模板系统,因此上述内容也适用于 Revel。

关于go - 直接从 Revel 模板引擎中拉取模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27105000/

相关文章:

javascript - 是什么导致 eventSource 停留在 readyState 0?

go - go tour的第23个任务的解法有什么问题?

java - Google App Engine "Cloud Datastore service"部署错误

c - 使用CGO将Go嵌套结构的数组转换为C?

php - Url() 基于产品选择

java - 支持html5的java模板引擎

c++ - Golang 调用 CUDA 库

javascript - 处理 Mustache.js 中的空列表

postgresql - 在 Revel 中使用 Gorm 查询表

php - golang,revel,如何解析 post json?