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?

Respuestas:


181

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

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

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

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

É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.


2

Esto funciona en jekyll :

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.