为了账号安全,请及时绑定邮箱和手机立即绑定

嵌入 FS 无法正确解析模板

嵌入 FS 无法正确解析模板

Go
PIPIONE 2022-10-10 15:45:58
我有以下代码:package mainimport (    "fmt"    "html/template"    "log"    "net/http"    "onsen/resources")var view *template.Templatevar err errorfunc init() {    fmt.Println("Starting up.")    view = template.Must(template.ParseFS(resources.Views, "templates/layouts/*.html", "templates/views/*.html", "templates/partials/*.html"))    if err != nil {        log.Fatal("Error loading templates:" + err.Error())    }}func main() {    server := http.Server{        Addr: "127.0.0.1:8070",    }    http.Handle("/webUI/", http.StripPrefix("/webUI/", http.FileServer(http.FS(resources.WebUI))))    http.HandleFunc("/process", process)    http.HandleFunc("/home", home)    http.HandleFunc("/test", test)    server.ListenAndServe()}在哪里onsen/resources:package resourcesimport (    "embed")// Views is our static web server layouts, views with dynamic content and partials content that is a static view.//go:embed templates/layouts templates/views templates/partialsvar Views embed.FS路线功能是:package mainimport (    "log"    "net/http")func home(w http.ResponseWriter, r *http.Request) {    err = view.ExecuteTemplate(w, "home.html", nil)    if err != nil {        log.Fatalln(err)    }}func test(w http.ResponseWriter, r *http.Request) {    err = view.ExecuteTemplate(w, "test.html", nil)    if err != nil {        log.Fatalln(err)    }}func process(w http.ResponseWriter, r *http.Request) {    err = view.ExecuteTemplate(w, "process.html", nil)    if err != nil {        log.Fatalln(err)    }}我的模板是: base.html<!-- Content of base.html: -->{{define "base"}}<!doctype html> <html> <head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <meta charset="utf-8"> </head> <body>            {{template "content" .}}</body></html>{{end}}意见是:<!-- Content of home.html: -->{{template "base" .}}{{define "content"}}This is home{{end}}但是所有路线都显示相同的结果,与模板相同test.html我为我的模板结构引用了这个,但看起来与嵌入有关!
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

应用程序将所有模板文件解析为一个模板集。test.html 中的“内容”模板是要添加到集合中的最后一个“内容”模板。这就是你在每一页看到的那个。将每个页面的模板解析为单独的集合。

所以,这里是正确的工作代码

package main


import (

    "html/template"

    "log"

    "net/http"

    "onsen/resources"

)


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

    view := template.Must(template.ParseFS(resources.Views, "templates/layouts/base.html", "templates/views/other.html", "templates/partials/*.html"))


    type approval struct {

        Status bool

    }


    workflow := approval{Status: false}

    err = view.ExecuteTemplate(w, "process.html", workflow)

    if err != nil {

        log.Fatalln(err)

    }

}

模板process.html是:


<!-- Content of other.html: -->

{{template "base" .}}

{{define "content"}}

process goes here

 {{ .Status }}


     {{if .Status}} 

        {{template "approved"}}

    {{else}} 

        {{template "rejected"}}

    {{end}}


{{end}}



查看完整回答
反对 回复 2022-10-10
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信