Golang embed html from file
Asked Answered
H

1

11

How can I do in Golang if I have an HTML file like this:

<html>
  <head lang="en">

  </head>
  <body>
    <header>{{.Header}}</header>
    <div class="panel panel-default">

    </div>
  </body>
</html>

and I want to embed a part of code into to header tags from an other file like this:

<div id="logo"></div><div id="motto"></div>

My try:

header, _ := template.ParseFiles("header.html")
c := Content{Header: ""}
header.Execute(c.Header, nil)

index := template.Must(template.ParseFiles("index.html"))
index.Execute(w, c)
Humeral answered 29/11, 2015 at 14:56 Comment(3)
What have you tried so far? Why is it not working? Please post a Minimal, Complete and Verifiable ExampleTestify
@Testify I refreshed the post with my try.Humeral
You've got two possibilities:use nested template (find into golang.org/pkg/text/template and name of nested template will be header.html) or use template.HTMLEscapeString. I would prefer first one.Lepus
G
13

If you parse all your template files with template.ParseFiles() or with template.ParseGlob(), the templates can refer to each other, they can include each other.

Change your index.html to include the header.html like this:

<html>
  <head lang="en">

  </head>
  <body>
    <header>{{template "header.html"}}</header>
    <div class="panel panel-default">

    </div>
  </body>
</html>

And then the complete program (which parses files from the current directory, executes "index.html" and writes the result to the standard output):

t, err := template.ParseFiles("index.html", "header.html")
if err != nil {
    panic(err)
}

err = t.ExecuteTemplate(os.Stdout, "index.html", nil)
if err != nil {
    panic(err)
}

With template.ParseGlob() it could look like this:

t, err := template.ParseGlob("*.html")
// ...and the rest is the same...

The output (printed on the console):

<html>
  <head lang="en">

  </head>
  <body>
    <header><div id="logo"></div><div id="motto"></div></header>
    <div class="panel panel-default">

    </div>
  </body>
</html>
Guinea answered 30/11, 2015 at 13:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.