Middleman:从数据文件渲染markdown时未定义的方法`link_to'

时间:2017-05-29 10:21:23

标签: markdown middleman kramdown tilt

我使用写入数据文件的Markdown在HAML模板中使用Middleman静态页面生成器呈现HTML。

我的数据文件data/faq.yaml如下所示:

dog:
  question: I want to know more about a dog.
  answerA: (HTML in data) Just <a href="https://google.com">Google</a> it!
  answerB: (Markdown link in data) Just [Google](https://google.com) it!

要将此降价转换为HTML,我使用的是config.rb

中定义的自定义帮助程序
helpers do
    def markdown(text)
        Tilt['markdown'].new { text }.render
    end
end

然后我在我的HAML模板中使用,如下所示:

= markdown(data.faq.dog.answerA)

在我尝试渲染数据文件中写下的markdown链接之前,一切正常。

以下是我的faq.haml模板:

  • Markdown链接直接写在HAML中,通过HAML的降价过滤器
  • 呈现
  • 从直接编写HTML链接的数据中引用answerA
  • 从具有使用markdown syntax
  • 编写的相同链接的数据引用answerB

faq.haml

.answer
    :markdown
        (HAML) Just [Google](https://google.com) it!
    = markdown(data.faq.dog.answerA)
    = markdown(data.faq.dog.answerB)

前2个链接正常呈现,但answerB中的降价链接会引发以下错误:

undefined method `link_to' for #<Object:0x000000044f9e18>

回溯:

/home/myself/.rvm/gems/ruby-2.4.0/gems/middleman-core-4.2.1/lib/middleman-core/renderers/kramdown.rb: in convert_a
    48.     scope.link_to(content, link, attr)  

为什么Kramdown在通过引用数据文件的自定义助手“询问”时无法转换降价链接,但在HAML中直接使用相同的语法时是否正确?可以做些什么,以便= markdown(data.faq.dog.answerB)中的降价链接正确呈现?

聚苯乙烯。我的最终目标是引用已在单独的data文件中定义的链接,但我认为首先解决此问题对于实现该目标是必要的。

1 个答案:

答案 0 :(得分:0)

应用程序上下文需要传递给Tilt。

def markdown(text)
  Tilt['markdown'].new(context: @app) { text }.render
end

Source