dongyi2534
2016-08-06 12:26 浏览 422

如何在Golang模板中打印换行? [重复]

This question already has an answer here:

I have stored some content in MySQL that looks like this.

"Hi!
How are you?
Here is the link you wanted:
http://www.google.com"

When I print it in Golang template, its not parsing correctly. I mean everything displayed in one line.

Its supposed to print like this

Hi!
How are you?
Here is the link you wanted:
http://www.google.com

Here is my template code.

<tr>
    <td>TextBody</td>
    <td>{{.Data.Content}}</td>
</tr>

Am I missing something?

</div>
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • 已采纳
    dotcraq3249 dotcraq3249 2016-08-06 13:49

    To print this in browser, replace with e.g. <br>
    like body = strings.Replace(body, " ", "<br>", -1)
    See this working sample code:

    package main
    
    import (
        "bytes"
        "fmt"
        "html/template"
        "log"
        "net/http"
        "strings"
    )
    
    func main() {
        http.HandleFunc("/", ServeHTTP)
        if err := http.ListenAndServe(":80", nil); err != nil {
            log.Fatal(err)
        }
    }
    
    func ServeHTTP(w http.ResponseWriter, r *http.Request) {
        html := `
    <!DOCTYPE html>
    <html>
    <body>  
    <table style="width:100%">
      <tr>
        <th>Data</th>
        <th>Content</th> 
      </tr> 
      <tr>
        <td>{{.Data}}</td>
        <td>{{.Content}}</td>
      </tr>
    </table> 
    </body>
    </html>
    `
        st := "Hi!
    How are you?
    Here is the link you wanted:
    http://www.google.com"
        data := DataContent{"data", st}
    
        buf := &bytes.Buffer{}
        t := template.Must(template.New("template1").Parse(html))
        if err := t.Execute(buf, data); err != nil {
            panic(err)
        }
        body := buf.String()
        body = strings.Replace(body, "
    ", "<br>", -1)
        fmt.Fprint(w, body)
    }
    
    type DataContent struct {
        Data, Content string
    }
    

    To see the output, run this code and open your browser at http://127.0.0.1/

    Also see: html/templates - Replacing newlines with <br>

    I hope this helps.

    点赞 评论 复制链接分享
  • dqk94069 dqk94069 2016-08-06 13:07

    Here you can use the Split function to parse the string and split the substring into slices using the sep as separator.

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func main() {
        txt := "Hi!
    How are you?
    Here is the link you wanted:
    http://www.google.com"
        res := strings.Split(txt, "
    ")
        for _, val := range res {
            fmt.Println(val)
        }
    }
    

    The output will be:

    Hi!
    How are you?
    Here is the link you wanted:
    http://www.google.com
    

    Example on Go Playground.

    点赞 评论 复制链接分享

相关推荐