Thoát dấu ngoặc nhọn kép bên trong khối mã đánh dấu trong Jekyll


86

Tôi đang sử dụng Jekyll để tạo một trang web tài liệu, trong đó tôi đang cố gắng ghi lại một số mã có chứa cú pháp giống như thanh điều khiển. Ví dụ {{foo}}. Vấn đề là Jekyll sử dụng các thẻ lỏng và bất kể tôi làm gì, các đường cong kép của tôi đang bị bộ xử lý chất lỏng xé toạc.

Nhân tiện, tôi đang sử dụng kramdown làm bộ xử lý đánh dấu.

Đây là một cái gì đó tôi đã thử:

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

Điều này loại bỏ hoàn toàn phần {{name}} vì nó cho rằng nó là một tham chiếu đến một biến chất lỏng.

Tôi cũng đã thử điều này:

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

Trong trường hợp này, tôi đang cố gắng thoát khỏi các dấu ngoặc nhọn nhưng kết quả là các dấu gạch chéo được hiển thị vào trang.

Tôi thậm chí đã thử điều này:

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

Phải thừa nhận rằng cái này khá ngớ ngẩn. Trong trường hợp này, vì tôi đã chỉ định cú pháp là html (nó cần phải là), thẻ span được hiển thị vào trang.

Vậy làm thế nào trên thế giới này tôi có thể giải quyết điều này?

Câu trả lời:


181

Bạn đang tìm kiếm {% raw %}thẻ.

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

6
À HẢ! Bạn là bạn thân mới của tôi.
giải cứu

Cảm ơn, Đây chính xác là những gì tôi muốn.
wukong

Cảm ơn ... điều này đã làm tôi phát điên.
learningMachine

Điều gì sẽ xảy ra nếu mã bạn muốn ghi lại {% raw %} {{...}} {% endraw %}giống như người ta có thể tìm thấy trong một bài đăng blog thảo luận về chủ đề này?
starfry

3
@starfry: Vui là bạn nên hỏi ... blog.slaks.net/2013-06-10/jekyll-endraw-in-code
SLaks 18/12/16

33

Bạn có thể sử dụng {% raw %}để đảm bảo nội dung không bị sửa đổi bởi Jekyll:

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

Tuy nhiên, lưu ý rằng đây không phải là một khối mã . Bạn sẽ cần định dạng mã bổ sung để làm cho nội dung của bạn hiển thị dưới dạng mã:

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

Cảm ơn vì sự bổ sung đó. Tôi đã kết thúc việc làm điều gì đó xấu hơn một chút so {% raw %}{{ foo }}{% endraw %}với mỗi lần xuất hiện vì vậy tôi sẽ xem xét những gì bạn đã làm ở đây.
giải cứu

Đây là một giải pháp linh hoạt hơn, vì nó cho phép giữ nguyên khối mã và cú pháp của nó.
Kiddo

19

Với jekyll mã là:

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

Đây là giải pháp chính xác. Cảm ơn!
Jerad Rutnam

Đáng chú ý: Các hiệu quả trên, cũng với Rouge highlighter. Tuy nhiên, raw không hoạt động nếu sử dụng cú pháp có hàng rào để làm nổi bật mã (ba
dấu gạch ngược

5

Đối với các tài liệu tham khảo trong tương lai: sử dụng đơn giản {% raw %}{% endraw %}chỉ là giải pháp tốt thứ hai vì chúng được hiển thị nếu bạn tra cứu Markdown trên github.com bình thường.

Cách tốt nhất là đặt {% raw %}{% endraw %}nhận xét HTML:

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

Do các bình luận HTML, nó được Github xem như một bình luận. Trong các trang Github, các thẻ thô sẽ ngăn việc phân tích cú pháp của các dấu ngoặc nhọn ở giữa các thẻ.


2

Điều này hoạt động trong jekyll :

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

FYI, tôi đã bao gồm ba dấu ngoặc kép để chứng minh rằng một khối mã trong Jekyll sẽ hoạt động. Nó không có ý định tạo một khối mã trong thư trả lời :)
Lisa Sinclair
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.