main.go
package main
import (
"html/template"
"net/http"
)
var templates = template.Must(template.ParseGlob("./templates/*"))
func viewHandler(w http.ResponseWriter, r *http.Request) {
err := templates.ExecuteTemplate(w, "indexPage", nil)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.HandleFunc("/index", viewHandler)
http.ListenAndServe(":8090", nil)
}
的index.html
{{define "indexPage"}}
<html>
{{template "header"}}
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">Welcome to TDT Project</a>
</div>
</div>
</nav>
<div class="btn-group-vertical">
<a href="#" class="btn btn-default">Button</a>
<a href="#" class="btn btn-default">Button</a>
</div>
</body>
</html>
{{end}}
另一个html文件是header.html并且是正确的。
当我更改html并再次运行main.go时,为什么视图总是一样的?(我已经清理了浏览器的缓存)例如,更改&#34;欢迎&#34;对于&#34; wwww&#34;,浏览器确实发生了变化。
然后我杀死了main.go的进度并再次运行它,视图被更改了。
有没有更好的方法来阻止main.go而不是取消这一进展?
答案 0 :(得分:0)
由于templates
是全局变量,因此只渲染模板一次。
每次可以将渲染移动到函数时重新渲染模板。然而这对性能不利,因为渲染非常昂贵,但在开发过程中它是可以的。作为替代方案,您可以使用@elithrar提出的内容。另一种方法是使用gin并修改它以扫描html文件而不仅仅是文件。