Escapar de llaves dobles dentro de un bloque de código de rebajas en Jekyll

86

Estoy usando Jekyll para crear un sitio de documentación en el que intento documentar un código que contiene una sintaxis similar a la de un manillar. Por ejemplo {{foo}}. El problema es que Jekyll usa etiquetas líquidas y, no importa lo que haga, el procesador de líquidos me arranca los rizos dobles.

Por cierto, estoy usando kramdown como procesador de rebajas.

Aquí hay algo que he probado:

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

Éste elimina la sección {{name}} por completo porque cree que es una referencia a una variable líquida.

También probé esto:

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

En este caso, estoy tratando de escapar de las llaves, pero el resultado es que las barras se representan en la página.

Incluso probé esto:

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

Es cierto que este fue bastante tonto. En este caso, debido a que he especificado la sintaxis como html (que debe ser), la etiqueta span se representa en la página.

Entonces, ¿cómo diablos puedo resolver esto?

rescate creativo
fuente

Respuestas:

181

Estás buscando la {% raw %}etiqueta.

{% raw %}
Hello, my name is {{name}}.
{% endraw %}
SLaks
fuente
6
¡Ah HAH! Tú eres mi nuevo mejor amigo.
rescuecreative
Gracias, esto es exactamente lo que quiero.
wukong
Gracias ... esto me estaba volviendo loco.
learningMachine
¿Qué pasa si el código que desea crear es el {% raw %} {{...}} {% endraw %}que se puede encontrar en una publicación de blog que discute este mismo tema?
Starfry
3
@starfry: Es curioso que preguntes ... blog.slaks.net/2013-06-10/jekyll-endraw-in-code
SLaks
33

Puede utilizar {% raw %}para asegurarse de que Jekyll no modifique el contenido:

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

Sin embargo, tenga en cuenta que este no es un bloque de código . Necesitará un formato de código adicional para que su contenido se represente 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 %}
Wilfred Hughes
fuente
Gracias por esa adición. Terminé haciendo algo un poco más feo que eso, como {% raw %}{{ foo }}{% endraw %}cada vez que ocurre, así que echaré un vistazo a lo que hiciste aquí.
rescuecreative
Esta es una solución más flexible, ya que permite mantener el bloque de código y su sintaxis.
Kiddo
19

Con jekyll el código es:

{% highlight html%}
{% raw %}
     <h2> {{ user.name.first | uppercase }}</h2>
     <p> {{ user.email }}</p>
{% endraw %}
{% endhighlight %}
Nicolás Molina
fuente
Ésta es la solución exacta. ¡Gracias!
Jerad Rutnam
Cabe destacar: Lo anterior funciona, también con el resaltador Rouge. Sin embargo, sin embargo, raw no funciona si se usa una sintaxis delimitada para resaltar el código (tres
comillas inversas iniciales
5

Para futuras referencias: usar simple {% raw %}y {% endraw %}es solo la segunda mejor solución, ya que se muestran si busca el Markdown en github.com normal.

La mejor manera es poner {% raw %}y {% endraw %}en comentarios HTML:

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

Debido a los comentarios HTML, Github lo ve como un comentario. En las páginas de Github, las etiquetas sin procesar evitarán el análisis de las llaves entre las etiquetas.

liquidar
fuente
2

Esto funciona en jekyll :

{%raw%}{{thing}}{%endraw%}
Lisa Sinclair
fuente
Para su información, incluí la cita triple para demostrar que un bloque de código dentro de Jekyll funcionaría. No se pretendía crear un bloque de código en la respuesta :)
Lisa Sinclair