转到模板 - 从对象库/数据库加载

时间:2015-06-24 20:35:26

标签: templates go mux gorilla

我正在重建支持从node.js到Go的客户特定模板(主题)的应用。

我目前正在使用render来呈现我的模板文件,但我实际需要访问存储在对象商店(如Cloudfiles)中的模板。

在node.js中,我已经用快递完成了这项工作,并且我重写了render()方法,但我还是无法弄清楚如何在Go中执行此操作。< / p>

我基本上需要做这样的事情:

func (c *Controller) MyRouteHandler (rw http.ResponseWriter, req *http.Request) {
    // retrieve the store from the context (assigned in middleware chain)
    store := context.Get(req, "store").(*Store) 

    ... do some stuff like load the entity from the database

    // retrieve the template from the Object store and 
    // create the template instance (template.New("template").Parse(...))
    tpl := c.ObjectStore.LoadTemplate(store, entity.TemplateFile)

    // I know render's .HTML function takes the path to the template 
    // so I'll probably need to show the html a different way
    c.HTML(rw, http.StatusOK, tpl, &PageContext{Title: "My Page", Entity: &entity})
}

如果需要,我可以通过做这样的事情动态地包含子模板:http://play.golang.org/p/7BCPHdKRi2但如果我诚实的话,它似乎不是一个好方法。

我已经搜索过这个问题的解决办法,但一直在打路障。任何建议/协助都会很棒。

修改

从本质上讲,我要问以下内容:

  1. 如何基于每个请求从数据存储中加载特定模板。
  2. 如何将其作为对客户的回复发送

1 个答案:

答案 0 :(得分:0)

如何基于每个请求从数据存储区加载特定模板。

//take HTTP for example:
resp, err := http.Get("http://mytemplates.com/template1")
if err != nil {
    // handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
templateString := string(body)

我如何将其作为对客户的回复发送

tmpl, err := template.New("name").Parse(templateString)
tmpl.Execute(rw, &yourDataModel{})