gpt4 book ai didi

go - 如何加载和缓存 100 页模板,并呈现正确的模板并在处理程序中返回

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:12 26 4
gpt4 key购买 nike

我有 100 个模板需要在 Web 应用程序中使用。

有没有一种方法可以将它们解析一次并重新使用它们,而不是为每个请求加载它们?

现在假设模板不接受模型,它们只是静态模板(以使其更简单)。

模板存储在下面的文件夹结构中,因此根据主题变量我将知道从哪里获取模板。

/views/{theme}/index.tmpl

到目前为止,我的处理程序是这样的:

func RenderPage(w http.ResponseWriter, r *http.Request) {

var theme := // set template theme based on some condition

}

我如何预加载所有模板,然后以某种方式获取正确的模板并将其呈现给此处理程序中的浏览器?

最佳答案

你可以做类似下面的事情,加载一个映射,它的索引是在模板中声明的模板名称 {{ define "Name"}},它的值是要解析的文件数组。然后遍历该映射并使用这些值创建一个 *template.Template 并将其存储在全局映射中,该映射的索引是模板名称,值是 *template.Template 值。

然后找出你需要的模板,从 map 上抓取它并执行它。

package main

import (
"html/template"
"log"
"net/http"
)

var templates map[string]*template.Template

func main() {
templates = make(map[string]*template.Template)
var template = make(map[string][]string)
template["Home"] = []string{"home.html"}
template["About"] = []string{"about.html"}
template["404"] = []string{"404.html"}
// Obviously you'd automate this ^
loadAllTemplates(&template, templates)
http.HandleFunc("/", renderCorrectTemplate)
http.ListenAndServe(":8080", nil)
}

func loadAllTemplates(templateMap *map[string][]string, templates map[string]*template.Template) {
for name, files := range *templateMap {
t, err := template.New(name).ParseFiles(files...)
if err != nil {
log.Printf("Error Parsing Template: %s", err.Error())
return
}
templates[name] = t
}
}

func renderCorrectTemplate(w http.ResponseWriter, r *http.Request) {
// This function would be different for you because you're not using GET, this is just an example.
r.ParseForm()
log.Println(r.URL.Query().Get("template"))
switch r.URL.Query().Get("template") {
case "Home":
//Gather Needed Data
err := templates["Home"].Execute(w, data)
//Handle err
case "About":
//Gather Needed Data
err := templates["About"].Execute(w, data)
//Handle err
default:
err := templates["404"].Execute(w, data)
//Handle err
}
}

关于go - 如何加载和缓存 100 页模板,并呈现正确的模板并在处理程序中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51433883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com