Zmiana znaczenia podwójnych nawiasów klamrowych wewnątrz bloku kodu przeceny w Jekyll

86

Używam Jekyll do tworzenia witryny z dokumentacją, w której próbuję udokumentować kod zawierający składnię podobną do kierownic. Na przykład {{foo}}. Problem polega na tym, że Jekyll używa płynnych tagów i bez względu na to, co robię, moje podwójne loki są wyrywane przez procesor cieczy.

Nawiasem mówiąc, używam kramdown jako procesora przecen.

Oto coś, czego próbowałem:

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

Ten całkowicie usuwa sekcję {{name}}, ponieważ uważa, że ​​jest to odniesienie do zmiennej cieczy.

Próbowałem też tego:

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

W tym przypadku próbuję uciec przed nawiasami klamrowymi, ale w rezultacie ukośniki są renderowane na stronie.

Próbowałem nawet tego:

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

Trzeba przyznać, że ten był całkiem głupi. W tym przypadku, ponieważ określiłem składnię jako html (a musi to być), tag span jest renderowany na stronie.

Więc jak na świecie mogę to rozwiązać?

ratowanie
źródło

Odpowiedzi:

181

Szukasz {% raw %}tagu.

{% raw %}
Hello, my name is {{name}}.
{% endraw %}
SLaks
źródło
6
Ah HA! Jesteś moim nowym najlepszym przyjacielem.
rescuecreative
Dzięki, właśnie tego chcę.
wukong
Dzięki ... to doprowadzało mnie do szału.
learningMachine
A co jeśli kod, który chcesz ominąć, jest {% raw %} {{...}} {% endraw %}taki, jaki można znaleźć w poście na blogu omawiającym ten właśnie temat?
starfry
3
@starfry: Zabawne, które powinieneś zapytać ... blog.slaks.net/2013-06-10/jekyll-endraw-in-code
SLaks
33

Możesz użyć, {% raw %}aby upewnić się, że zawartość nie jest modyfikowana przez Jekyll:

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

Należy jednak pamiętać, że nie jest to blok kodu . Będziesz potrzebować dodatkowego formatowania kodu, aby treść była renderowana jako kod:

{% 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
źródło
Dzięki za ten dodatek. Skończyło się na tym, że robiłem coś nieco brzydszego niż to, jak {% raw %}{{ foo }}{% endraw %}za każdym razem, więc przyjrzę się temu, co tutaj zrobiłeś.
rescuecreative
Jest to rozwiązanie bardziej elastyczne, ponieważ pozwala zachować blok kodu i jego składnię.
Kiddo
19

Kod Jekyll to:

{% highlight html%}
{% raw %}
     <h2> {{ user.name.first | uppercase }}</h2>
     <p> {{ user.email }}</p>
{% endraw %}
{% endhighlight %}
Nicolas Molina
źródło
To jest dokładne rozwiązanie. Dzięki!
Jerad Rutnam
warte uwagi: powyższe działa, także z rozświetlaczem Rouge. Jednak surowy
format
5

Do przyszłych odniesień: używając zwykłego {% raw %}i{% endraw %} jest to drugie najlepsze rozwiązanie, ponieważ są one wyświetlane, jeśli spojrzysz na Markdown na zwykłym github.com.

Najlepszym sposobem jest umieszczanie {% raw %}i {% endraw %}w komentarzach HTML:

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

Ze względu na komentarze HTML jest on postrzegany przez Github jako komentarz. Na stronach Github surowe tagi zapobiegną parsowaniu nawiasów klamrowych między tagami.

likwidat
źródło
2

Działa to w Jekyll :

{%raw%}{{thing}}{%endraw%}
Lisa Sinclair
źródło
Do Twojej wiadomości, dołączyłem cudzysłów potrójny wstecz, aby zademonstrować, że blok kodu w Jekyll będzie działał. Nie chodziło o tworzenie bloku kodu w odpowiedzi :)
Lisa Sinclair