Go基础学习记录 - 编写Web应用程序 - 模板缓存

{app.params.name}}{app.params.name}}{app.params.name}}

模板缓存

renderTemplate函数中的代码效率是比较低的,每次呈现页面时,renderTemplate都会调用ParseFiles。 更好的处理方法是在程序初始化时调用ParseFiles一次,将所有模板解析为单个* Template。 然后我们可以使用ExecuteTemplate方法呈现特定模板。

首先,我们创建一个名为templates的全局变量,并使用ParseFiles对其进行初始化。

var templates = template.Must(template.ParseFiles("template/edit.html", "template/view.html"))

函数template.Must是一个方便的包装器,当传递非零错误值时会发生异常,否则返回*模板不变。
如果模板无法加载,唯一明智的做法就是退出程序。
ParseFiles函数接受任意数量的用于标识模板文件的字符串参数,并将这些文件解析为以基本文件名命名的模板。
如果我们要为程序添加更多模板,我们会将它们的名称添加到ParseFiles调用的参数中。
然后我们修改renderTemplate函数以使用适当模板的名称调用templates.ExecuteTemplate方法:

func renderTemplate(w http.ResponseWriter, templateName string, p *Page) {
    fmt.Println(templates)
    err := templates.ExecuteTemplate(w, templateName+".html", p)

    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
}

请注意,模板名称是模板文件名,因此我们必须将".html"附加到tmpl参数。
尤其注意的是,templates在初始化的时候我是将模板放在了一个文件夹下面,但是在renderTemplate中使用的时候只要传递文件名就好了,对应的路径都不需要拼接。

版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/46


版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 小绒毛的足迹博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/46