doucheng9634 2014-04-17 03:18
浏览 236
已采纳

如何使用blackfriday将markdown渲染为golang模板(html或tmpl)?

I use the Martini framework,I have some markdown file and I want render it as HTML in tmpl/html template.

The markdown file like this:

title: A Test Demo
---
##ABC
> 123

And the template file like this:

<head>
  <title>{{name}}</title>
</head>

<body>
  <h2>{{abc}}</h2>
  <blockquote>
    <p>{{xyz}}</p>
  </blockquote>
</body>

I use the blackfriday parse the markdown and return []byte type,next step I wanna render the markdown file to this template and make each block to the right place,so how can I do this right way? Or use any way to do this better?

  • 写回答

1条回答 默认 最新

  • douyan8266 2014-04-17 13:00
    关注

    One way to achieve this is to use the Funcs method to add a custom function to the template function map. See the Functions section of the template package docs for more info.

    Given a template file page.html, some writer w (probably an http.ResponseWriter), and some struct p with a field Body containing data to be put into a template field, you can do something like:

    Define a function:

    func markDowner(args ...interface{}) template.HTML {
        s := blackfriday.MarkdownCommon([]byte(fmt.Sprintf("%s", args...)))
        return template.HTML(s)
    }
    

    Add it to the template function map:

    tmpl := template.Must(template.New("page.html").Funcs(template.FuncMap{"markDown": markDowner}).ParseFiles("page.html"))
    

    Execute the template:

    err := tmpl.ExecuteTemplate(w, "page.html", p)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
    

    Then, in your template file, you can put something like:

    {{.Body | markDown}}
    

    And it will pass the Body through your markDowner function.

    Playground

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘