Escapar de chaves duplas dentro de um bloco de código de marcação em Jekyll


86

Estou usando Jekyll para criar um site de documentação em que estou tentando documentar algum código que contém sintaxe semelhante a um guiador. Por exemplo {{foo}}. O problema é que Jekyll usa etiquetas líquidas e não importa o que eu faça, meus cachos duplos estão sendo arrancados pelo processador de líquidos.

A propósito, estou usando kramdown como processador de redução.

Aqui está algo que tentei:

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

Este remove a seção {{name}} completamente porque pensa que é uma referência a uma variável líquida.

Eu também tentei isso:

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

Neste caso, estou tentando escapar das chaves, mas o resultado é que as barras são renderizadas na página.

Eu até tentei isso:

{% highlight html linenos %}
  Hello, my name is <span>{</span>{name}}.
{% endhighlight %}

É certo que este era muito burro. Nesse caso, como especifiquei a sintaxe como html (o que precisa ser), a tag span é renderizada na página.

Então, como posso resolver isso?

Respostas:


181

Você está procurando a {% raw %}etiqueta.

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

6
Ah HAH! Você é meu novo melhor amigo.
resgatador criativo

Obrigado, isso é exatamente o que eu quero.
wukong

Obrigado ... isso estava me deixando louco.
learningMachine

E se o código que você deseja escapar for o {% raw %} {{...}} {% endraw %}que você pode encontrar em uma postagem de blog discutindo esse mesmo assunto?
starfry

3
@starfry: Engraçado você perguntar ... blog.slaks.net/2013-06-10/jekyll-endraw-in-code
SLaks

33

Você pode usar {% raw %}para garantir que o conteúdo não seja modificado por Jekyll:

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

No entanto, observe que este não é um bloco de código . Você precisará de formatação de código adicional para fazer seu conteúdo renderizar como código:

{% 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 %}

Obrigado por essa adição. Acabei fazendo algo um pouco mais feio do que isso {% raw %}{{ foo }}{% endraw %}para cada ocorrência, então vou dar uma olhada no que você fez aqui.
criativa de resgate de

Esta é uma solução mais flexível, pois permite manter o bloco de código e sua sintaxe.
Kiddo

19

Com jekyll, o código é:

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

Esta é a solução exata. Obrigado!
Jerad Rutnam

vale a pena notar: O acima funciona, também com o marcador Rouge. No entanto, o raw não funciona se estiver usando sintaxe restrita para código de destaque (três crases principais como `` `html…)
Frank Nocke,

5

Para referências futuras: usar simples {% raw %}e {% endraw %}é apenas a segunda melhor solução, pois essas são mostradas se você procurar o Markdown em github.com normal.

A melhor maneira é colocar {% raw %}e {% endraw %}em comentários HTML:

<!-- {% raw %} -->
something with curlky brackets like { this } and { that }
<!-- {% endraw %} -->

Devido aos comentários em HTML, ele é visto pelo Github como um comentário. Nas páginas do Github, as tags brutas evitarão a análise das chaves entre as tags.


2

Isso funciona em jekyll :

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

Para sua informação, incluí a citação tripla para demonstrar que um bloco de código dentro de Jekyll funcionaria. A intenção não era criar um bloco de código na resposta :)
Lisa Sinclair
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.