从实例变量中渲染降价与 Slim/Rails



我无法让 Slim 渲染我的降价:

div.container
div.row
div.col-md-8.job_description
markdown: 
= @listing.job_description

这只是呈现字符串

这是一个 h1 ## h2 ### h3>这是一句话 * 你好 * 再见 foo

没有换行符或任何内容(包含在实际字符串中)

如何使其正确渲染?谢谢!

我放弃了在slim中使用markdown:,已经尝试了一切。

我最终创建了这个帮助程序,将其放在app/helpers中的任何文件中

def markdown(content)
return '' if content.blank?
markdown = Redcarpet::Markdown.new(Redcarpet::Render::XHTML, autolink: true, space_after_headers: true)
sanitize(markdown.render(content)).html_safe
end

然后在视图中

= markdown @listing.job_description

您当然必须安装redcarpet宝石。

gem 'redcarpet'

以这种方式渲染变量的 Markdown 是不可能的,因为 Slim 首先渲染 Markdown(或任何其他嵌入式引擎语言),然后才插入变量内容。

它以这种方式工作是有道理的,因为 Slim 的嵌入式引擎标签旨在作为内联包含不同语言的一种方式,以便您可以在那里阅读它们。如果 markdown 未以文字形式包含在模板中,则使用嵌入式引擎比在将 Markdown 传递给 Slim 之前简单地渲染 Markdown 没有优势(作为 HTML,并使用"=="来防止 Slim 进一步处理)。

我还认为,它是这样设置的,因为它旨在提供将文本插入 Markdown 的简单方法 - 它本身没有插值手段 - 与其他所有内容相同的模板中。

冰人建议的助手是一个很好的方法。我可能会在模板之外调用它,但这只是因为我个人更喜欢在模板内尽可能少地做。

看起来您的降价内容没有缩进markdown:,因此它不会被降价处理。

它应该看起来更像这样:

div.col-md-8.job_description
markdown: 
= @listing.job_description

有关详细信息,请参阅文档的此部分。

最新更新