在Jekyll中的Markdown代码块中如何转义双花括号?

121

我正在使用Jekyll创建一个文档网站,其中我正在尝试记录一些包含handlebars类似语法的代码。例如{{foo}}。问题是Jekyll使用液体标记,无论我做什么,我的双括号都会被液体处理器删除。

顺便说一下,我正在使用kramdown作为markdown处理器。

这是我尝试过的一些方法:

{% highlight html linenos %}
  Hello, my name is {{name}}.
{% endhighlight %}

这个代码完全删除了{{name}}部分,因为它认为这是对一个液体变量的引用。

我还尝试了下面的代码:

{% highlight html linenos %}
  Hello, my name is \{\{name\}\}.
{% endhighlight %}
在这种情况下,我试图转义大括号,但结果是斜杠被呈现在页面上。
我甚至尝试了这个:
{% highlight html linenos %}
  Hello, my name is <span>{</span>{name}}.
{% endhighlight %}

不可否认,这个问题相当愚蠢。在这种情况下,因为我已经将语法指定为html(它需要是这样),所以span标签会被呈现到页面上。

那么我该如何解决呢?

5个回答

226

你正在寻找 {% raw %} 标签。

{% raw %}
Hello, my name is {{name}}.
{% endraw %}

1
如果你想要转义的代码是 {% raw %} {{...}} {% endraw %},就像在讨论这个主题的博客文章中发现的那样,该怎么办? - starfry
4
很有趣,你提出这个问题... http://blog.slaks.net/2013-06-10/jekyll-endraw-in-code/ - SLaks

44

您可以使用{% raw %}来确保内容不被Jekyll修改:

{% raw %}
This is inserted literally: {{foo}}
{% endraw %}

但请注意,这不是代码块。您需要进行其他代码格式设置才能使内容呈现为代码:

{% raw %}
    I'm a code block, because I'm indented by 4 spaces
{% endraw %}
{% raw %}
```handlebars
I'm a code block that contains {{handlebars}}
with highlighting.
```
{% endraw %}

谢谢你的补充。我最终做了一些比那更丑陋的事情,像是在每个出现的地方都加上{% raw %}{{ foo }}{% endraw %},所以我会看看你在这里做了什么。 - rescuecreative
这是一种更灵活的解决方案,因为它允许保留代码块及其语法。 - Kiddo

23

使用Jekyll的代码为:

{% highlight html%}
{% raw %}
     <h2> {{ user.name.first | uppercase }}</h2>
     <p> {{ user.email }}</p>
{% endraw %}
{% endhighlight %}

值得注意的是:以上内容也适用于Rouge代码高亮器。但是,如果使用围栏语法来突出显示代码(例如三个反引号,如```html…),则原始代码不起作用。 - Frank N

12

未来参考:仅使用纯文本{% raw %}{% endraw %}是第二好的解决方案,因为如果您在正常的github.com上查找Markdown,它们会显示出来。

最好的方法是将{% raw %}{% endraw %}放在HTML注释中:

<!-- {% raw %} -->
something with curlky brackets like { this } and { that }
<!-- {% endraw %} -->
由于HTML注释,Github将其视为注释。在Github页面中,原始标签会防止解析标签之间的花括号。

1
那正是我的担忧。使用HTML注释的想法非常巧妙。 - The Fool
@TheFool 很高兴能够帮助到别人 :) - liquidat
非常好的答案。我的markdown文件中有很多代码块需要转义,最简单的解决方法是在开头放置<!-- {% raw %} -->,然后在文章末尾完全放置<!-- {% endraw %} -->,这样一次性转义了所有内容。 - jawira

8

这在 jekyll 中有效:

{%raw%}{{thing}}{%endraw%}

1
请注意,我包含了三个反引号来演示 Jekyll 中的代码块可以正常工作。这并不是为了在回复中创建一个代码块 :) - Lisa Sinclair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接