我希望拥有独立的.markdown文件,然后将其包含在我的haml模板中。所以我想以某种方式包括 - 不渲染 - 外部文件到模板中。我希望父文件中包含:markdown
,其中包含正文,然后是.markdown文件,只是纯粹的降价。
或者:有没有办法只使用markdown作为rails模板语言(同样的方式我可以在erb或haml和rails中编写模板或局部文件来解决它)?
答案 0 :(得分:4)
这与您的解决方案类似,但使用:markdown
过滤器。 Haml对任何已过滤的文本进行字符串插值,因此您可以像这样读取降价文件。
:markdown
#{File.read(File.join(File.dirname(__FILE__), "foo.markdown"))}
你可以把它放到帮助器中,但是你必须小心文件路径。
答案 1 :(得分:2)
我能想到的最简单的方法是给Markdown create a custom template handler。你可以使用Markdown代码作为部分代码(也可以免费获得本地人的支持)。
module Markdown
class Template < ActionView::Template::Handler
include ActionView::Template::Handlers::Compilable
self.default_format = Mime::HTML
def compile(template)
'"' + Maruku.new(template.source).to_html + '".html_safe'
end
end
end
然后使用markdown扩展名(在application.rb或自定义初始化程序中)注册它:
ActionView::Template.register_template_handler(:md, Markdown::Template)
然后用户渲染就像你对任何部分一样:)
# for file foo.md
= render 'foo'
答案 2 :(得分:0)
这是我能想到的最好的(根本没有涉及haml过滤器):
=raw Maruku.new(File.read(File.dirname(__FILE__)+'/foo.markdown')).to_html
答案 3 :(得分:0)
这是我向HAML开发人员提出的问题。我建议我们需要一个:include
过滤器用于HAML。他们的回答是我们应该将文件加载到变量中,然后像使用其他任何变量一样使用变量。
答案 4 :(得分:0)
至少在Rails 3.1.0中不推荐使用扩展ActionView::Template::Handler
。相反,以下工作对我有用:
在lib/markdown_views.rb
:
require "rdiscount"
class MarkdownViews
def call template
'md = ERB.new(<<\'EOF\'%s
EOF
).result( binding)
RDiscount.new( md).to_html.html_safe'% template.source
end
end
在config/application.rb
:
require "markdown_views"
ActionView::Template.register_template_handler :markdown, MarkdownViews.new
在views/public/home.html.markdown
:
# H1
+ Bullets.
+ screaming.
+ from out of nowhere
<%= "Embedded Ruby" %>