【问题标题】:Rendering markdown with Slim/Rails from an instance var使用实例变量中的 Slim/Rails 渲染降价
【发布时间】:2017-06-12 17:01:40
【问题描述】:

我无法让 Slim 呈现我的降价:

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

这只是渲染字符串

这是一个 h1 ## h2 ### h3 > 这是一个报价 * 你好 * 再见 foo

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

我怎样才能让它正确渲染?谢谢!

【问题讨论】:

    标签: ruby-on-rails markdown slim-lang


    【解决方案1】:

    我放弃了在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。

    gem 'redcarpet'
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        看起来你的 markdown 内容在markdown: 下没有缩进,所以它不会被 markdown 处理。

        它应该看起来更像这样:

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

        更多信息请参见this section of the docs

        【讨论】:

        • 当我这样做时,它只会在屏幕上打印= @listing.job_description
        猜你喜欢
        • 2013-11-13
        • 1970-01-01
        • 2020-12-13
        • 1970-01-01
        • 2014-10-31
        • 2021-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多