Экранирование двойных фигурных скобок внутри блока кода уценки в Jekyll


86

Я использую Jekyll для создания сайта документации, на котором я пытаюсь задокументировать некоторый код, который содержит синтаксис, подобный ручке. Например {{foo}}. Проблема в том, что Jekyll использует жидкие метки, и что бы я ни делал, мои двойные завитки вырываются жидким процессором.

Кстати, в качестве процессора уценки я использую kramdown.

Вот что я пробовал:

{% 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 отображается на странице.

Так как же я могу решить эту проблему?

Ответы:


181

Вы ищете {% raw %}метку.

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

6
Ага! Ты мой новый лучший друг.
rescuecreative 08

Спасибо, это именно то, что я хочу.
Wukong

Спасибо ... это сводило меня с ума.
learningMachine

Что, если код, который вы хотите убрать, будет {% raw %} {{...}} {% endraw %}таким, какой можно найти в блоге, посвященном этой теме?
starfry

3
@starfry: Забавно, что ты должен спросить ... blog.slaks.net/2013-06-10/jekyll-endraw-in-code
SLaks

33

Вы можете использовать, {% 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

19

С Джекиллом код:

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

Это точное решение. Благодарность!
Джерад Рутнам 08

Стоит отметить: вышеперечисленное работает также с маркером Rouge. Однако raw, однако, не работает при использовании изолированного синтаксиса для выделения кода (три ведущих обратных кавычки, такие как `` html ...)
Фрэнк Нок,

5

Для справок в будущем: использование plain {% raw %}и {% endraw %}является вторым лучшим решением, поскольку они показаны, если вы посмотрите Markdown на обычном github.com.

Лучше всего добавить {% raw %}и {% endraw %}в HTML-комментарии:

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

Из-за комментариев HTML он рассматривается Github как комментарий. На страницах Github необработанные теги предотвратят анализ фигурных скобок между тегами.


2

Это работает в jekyll :

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

К вашему сведению, я добавил тройную обратную кавычку, чтобы продемонстрировать, что блок кода в Jekyll будет работать. Создавать блок кода в ответе не предполагалось :)
Лиза Синклер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.