如何使用液体标签访问Jekyll中的未渲染(Markdown)内容



通过阅读文档jekyll的模板数据,可能会认为访问未渲染内容的方法是page.content;但据我所知,这是在Markdown解析器已经渲染的帖子的内容。

我需要一个直接访问RAW(原始Markdown)内容的解决方案,而不是简单地尝试将HTML转换回Markdown。

用例背景

我的用例是:我使用pandoc插件为我的jekyll网站渲染降价,并使用" Mathjax"选项获得漂亮的方程式。但是,MathJax需要JavaScript,因此这些不显示在RSS feed中,我通过像So这样的page.content循环来生成:

 {% for post in site.posts %}
 <entry>
   <title>{{ post.title }}</title>
   <link href="{{ site.production_url }}{{ post.url }}"/>
   <updated>{{ post.date | date_to_xmlschema }}</updated>
   <id>{{ site.production_url }}{{ post.id }}</id>
   <content type="html">{{ post.content | xml_escape }}</content>
 </entry>
 {% endfor %}

正如xml_escape过滤器所暗示的那样,post.content此处出现在HTML中。如果我可以获得原始内容(想象一下post.contentraw或存在),那么我可以轻松地添加一个将Pandoc与" WebTex"选项一起使用的过滤器,以在解析RSS feed时为方程生成图像,例如:

require 'pandoc-ruby'
module TextFilter
  def webtex(input)
    PandocRuby.new(input, "webtex").to_html
  end
end
Liquid::Template.register_filter(TextFilter)

但是,当我获得对HTML Mathjax中已经呈现的方程而不是原始降价时的内容时,我就卡住了。转换回Markdown无济于事,因为它不会转换MathJax(简单地插入)。

有什么建议吗?当然有一种方法可以致电原始降价?

这是我认为您会遇到的麻烦:https://github.com/mojombo/jekyll/jekyll/blob/master/master/lib/jekyll/jekyll/jekyll/convertible.rb https://github.com/mojombo/jekyll/blob/master/lib/jekyll/site.rb

从我的阅读中,对于给定的帖子/页面self.content被跑步的结果替换为self.content。通过markdown和liquid,在convertible中的第79行。rb:

self.content = Liquid::Template.parse(self.content).render(payload, info)

帖子在页面之前呈现,在第37-44行和197-211中查看。RB:

def process
  self.reset
  self.read
  self.generate
  self.render
  self.cleanup
  self.write
end
... ...
def render
  payload = site_payload
  self.posts.each do |post|
    post.render(self.layouts, payload)
  end
  self.pages.each do |page|
    page.render(self.layouts, payload)
  end
  self.categories.values.map { |ps| ps.sort! { |a, b| b <=> a } }
  self.tags.values.map { |ps| ps.sort! { |a, b| b <=> a } }
rescue Errno::ENOENT => e
  # ignore missing layout dir
end

当您渲染此页面时,Self.content已渲染到HTML - 因此,这不是停止其渲染的情况。已经完成了。

但是,生成器(https://github.com/mojombo/jekyll/wiki/plugins)在渲染阶段之前运行,因此,据我所知,从阅读来源方面,您应该能够相当琐碎地写作。一个将复制self.content中的发电机中的某些属性(例如self.raw_content),您以后可以在模板中访问raw markdown {{page.raw_content}}。

我最终将我的 .md文件重命名为 .html,这样它们就不会被降价渲染器渲染。

这应该有效。

# frozen_string_literal: true
module RawContent
  class Generator < Jekyll::Generator
    def generate(site)
      site.posts.docs.each do |post|
        post.data['raw_content'] = post.content
      end
    end
  end
end

尝试使用page.content

例如,

---
layout: default
---
Markdown source:
<pre>
{{ page.content }}
</pre>
Rendered HTML
{{ content }}

请参阅Jekyll文档的液体变量部分。

最新更新