包括Jekyll / Liquid代码而不进行渲染

时间:2016-06-07 19:57:42

标签: jekyll liquid

{% include file.html %}是否可以在其中没有标记的情况下进行渲染?

  • 我试过{% include file.html | escape_once %}给出了一个 误差

  • running it through {% raw %} {% include file.html %} {% endraw %} 这给了{% include file.html %}(毫不奇怪)。

我正在寻找{% include file.html | no_render %}

的内容

我无法将原始代码放在file.html中的原因是我试图将其重新用作模板(它有点像黑客)。

这对于尝试自我描述的页面也很有用。即This useful thing works like this: {% include useful_snippet.html | no_render %}

3 个答案:

答案 0 :(得分:2)

<强> useful_snippet.html

{% raw %}
  {% comment %}Alot of liquid code{% endcomment %}
  {% assign toto = "Welcome to the hack !" %}
  {% assign string = "a,b,c,d" %}
  {% assign array = string | split:"," %}
  {% for item in array %}
    {{ item }}
  {% endfor %}
{% endraw %}

基本显示

<pre><code>{% include useful_snippet.html %}</code></pre>

显示jekyll高亮标记

{% highlight liquid %}{% include useful_snippet.html %}{% endhighlight %}

编辑:仅在Jekyll处理中,Liquid会渲染一次。因此,无法让一个模板同时渲染Liquid和渲染原始Liquid代码。

如果你想这样做,你必须使用generator pluginhooks

答案 1 :(得分:0)

对我来说,我没有在{% raw %}{% endraw %}中包裹东西的运气。 解析器对我的js / html混合进行了稍微的修改,破坏了事情。

为了将js / html包含为原始文件,我使用kramdown's nomarkdown extension,如下所示:

{::nomarkdown}
<script type="text/javascript" src="https://www.pouet.net/pouet-player.js" async defer></script>
<div class="pouet-player" data-version="v1" data-size="medium"><a href='https://www.pouet.net/prod.php?which=30244'>fr-041: debris. by Farbrausch</a></div>
{:/}

答案 2 :(得分:0)

这是带有自定义标签的解决方案:

raw_include_relative.rb放在_plugins/目录中的Jekyll根目录下:

# _plugins/raw_include_relative.rb
module Jekyll
  module Tags
    class RawIncludeRelativeTag < IncludeRelativeTag
      # Overriding is explicitly allowed, to modify file content by subclassing:
      # https://github.com/jekyll/jekyll/blob/f5826eed3cde692f84e35140209d5a59ec3eb295/lib/jekyll/tags/include.rb#L178
      def read_file(file, context)
        # Hack: instead of including the file directly without liquid escaping,
        # simply wrap the entire file in a `raw` liquid tag, suppressing liquid
        # processing.
        "{% raw %}" + super + "{% endraw %}"
      end
    end
  end
end

Liquid::Template.register_tag("raw_include_relative", Jekyll::Tags::RawIncludeRelativeTag)

然后,您可以像使用{% raw_include_relative somefile.txt %}一样使用include_relative

In-practice example