【发布时间】:2012-05-22 05:50:20
【问题描述】:
我使用的是 Sinatra,而 Sinatra 使用 Tilt 进行模板渲染。
默认情况下,Redcarpet 有许多渲染扩展。如何通过 Sinatra 的 #render 方法使用其中一些扩展?
我需要渲染带有:gh_codeblock 扩展名的markdown 文件。
【问题讨论】:
标签: sinatra markdown tilt redcarpet
我使用的是 Sinatra,而 Sinatra 使用 Tilt 进行模板渲染。
默认情况下,Redcarpet 有许多渲染扩展。如何通过 Sinatra 的 #render 方法使用其中一些扩展?
我需要渲染带有:gh_codeblock 扩展名的markdown 文件。
【问题讨论】:
标签: sinatra markdown tilt redcarpet
在 Sinatra 中,您通常不直接使用 render 方法,而是使用 method corresponding to the appropriate template language,在本例中为 markdown。
您应该能够将您想要的任何选项作为哈希传递给此方法,Sinatra(和 Tilt)会将它们传递给模板引擎。但是,最新发布的 Tilt gem (1.3.3) 并没有通过所有的降价选项,只有:filter_html 和:smart,所以这不起作用。这已在当前的 Tilt head 中修复,只是尚未发布到发布的 gem 中。
如果您使用的是Bundler,则可以使用Bundler’s Git support 解决此问题:
gem 'tilt', :git => 'git://github.com/rtomayko/tilt.git'
或者,您可以download 最新版本的 Tilt 并确保其 lib 目录位于您的应用程序加载路径中,也许将其放入 vendor 目录中。
【讨论】:
如果我阅读了 sinatra、tilt 和 redcarpet 的源代码,你应该可以这样做:
render('your_view', {:gh_codeblock => true}, {HASH_OF_YOUR_LOCAL_VARIABLES})
要渲染的第二个参数是传递给模板引擎的选项哈希。见:
def markdown(template, options={}, locals={})
render :markdown, template, options, locals
end
【讨论】: