猿问

模板继承在go中创建空白页面

我正在尝试创建一个完整的堆栈应用程序,但我在模板部分遇到了问题。


只要页面是静态的,以下代码就可以了,但是当我开始使用继承函数(例如 {{template}}、{{define}} 或 {{block}})时会返回一个空白页面。


main.go :


package main


import (

    "fmt"

    "html/template"

    "log"

    "net/http"


    "github.com/gorilla/mux"

)


func main() {

    router := mux.NewRouter()


    router.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) {

        fmt.Println("begin")

        files := []string{

            "layout.html",

            "index.html",

        }


        tmpl, err := template.ParseFiles(files...)

        if err != nil {

            http.Error(rw, fmt.Sprintf("failed parsing template files | %s", err.Error()), http.StatusInternalServerError)

            return

        }


        if err := tmpl.Execute(rw, nil); err != nil {

            http.Error(rw, fmt.Sprintf("failed rendering template | %s", err.Error()), http.StatusInternalServerError)

            return

        }

    }).Methods("GET")


    if err := http.ListenAndServe(fmt.Sprintf(":3000"), router); err != nil {

        log.Fatalf("failed starting server | %s", err.Error())

    }

}


布局.html


{{define "base"}}

<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <meta http-equiv="X-UA-Compatible" content="IE=edge">

        <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">

        <!-- bootstrap CSS -->

        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

        <title></title>

    </head>

    <body>

        <main>

            {{template "main" .}}

        </main>

索引.html


{{template "base" .}}


{{ define "main" }}

    <h2>hello</h2>

    <p>test</p>

{{ end }}


我已经从字面上复制了这些示例,但它仍然不起作用。我错过了什么?


拉风的咖菲猫
浏览 94回答 1
1回答

慕桂英546537

ParseFiles返回参数列表中第一个文件的模板。文件的模板是 {{define}}/{{end}} 块之外的内容。列表中的第一个文件 layout.html 在 {{define}}/{{end}} 块之外只有空格。您需要文件 index.html 中的模板。交换文件的顺序以解决问题。&nbsp; &nbsp; files := []string{&nbsp; &nbsp; &nbsp; &nbsp; "index.html",&nbsp; &nbsp; &nbsp; &nbsp; "layout.html",&nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Go
我要回答