2012-06-11 46 views
9

Tôi đang cố gắng hiển thị một liên kết đi trước bởi một biểu tượng. Tôi đang sử dụng động cơ templating Slim cùng với Bootstrap CSS.Cách hiển thị HTML bên trong các mẫu Slim

Thông thường, bạn có thể làm điều này theo cách sau:

<a href="#"><i class="icon-user"></i> My Profile</a> 

Theo tài liệu của Slim, chúng ta có thể sử dụng == để render mà không thoát HTML. Vì vậy, dịch này để Slim, tôi đã thử biến thể sau đây:

li== link_to "<i class='icon-user'></i> My Profile", current_user 
li== link_to "#{'<i class="icon-user"></i>'.html_safe} My Profile", current_user 
li= link_to "#{'<i class="icon-user"></i>'.html_safe} My Profile", current_user 

Tất cả các biến thể render <a href="https://stackoverflow.com/users/1"><i class="icon-user"></i> My Profile</a> thoát thẻ i.

Làm cách nào để ngăn Slim hoặc Rails thoát khỏi html?

(Rails 3.2 với Slim 1.2.1)

Trả lời

9

Bạn muốn vô hiệu hóa HTML thoát cho link_to đối số, không phải toàn bộ link_to kết quả. Bạn đang khá gần với html_safe nhưng nội suy chuỗi của bạn đang ăn cờ "an toàn cho HTML" của bạn. Điều này sẽ làm việc tốt hơn:

li= link_to '<i class="icon-user"></i> My Profile'.html_safe, current_user 
8

Ngoài ra, bạn có thể viết những dòng này như

li 
    a href=url_for(current_user) 
    i.icon-user My Profile 

được cho rằng là một chút dễ dàng hơn để đọc.

+0

Thêm rằng nếu bạn có một giá trị thuộc tính đó nên được trả lại như html an toàn, sử dụng kép "=": 'khoảng dữ liệu biểu tượng == icon' (nơi biểu tượng cuối cùng là một biến có chứa &#...;) – elado

+0

@elado: không phải tài liệu mỏng nói chính xác ngược lại: https://github.com/slim-template/slim#output-without-html-escaping-? – MoMolog

+2

'==' không thoát, '='. Bạn có thể sử dụng 'tag attr = variable' để hiển thị biến thoát. nếu bạn không muốn thoát khỏi nó, hãy sử dụng 'tag attr == variable'. Ví dụ: để hiển thị đúng thực thể html dưới dạng thuộc tính, bạn không nên thoát nó: ruby: 'icon =" { "' slim: 'span.icon data-icon == icon' – elado

1

Có một cách khác để giải quyết vấn đề dưới đây trong trường hợp nó giúp mọi người. Sử dụng một khối đặc biệt hữu ích nếu bạn có mã phức tạp hơn để bao gồm trong liên kết.

li 
    = link_to current_user do 
    i.icon-user> 
    | My Profile 
6

Điều này đã được trả lời, nhưng nếu bạn thực sự có một số html và bạn muốn hiển thị nó trong một mẫu mỏng, hãy sử dụng gấp đôi.

== "<i>test</i>" 

sẽ được giống như

= "<i>test</i>".html_safe 
Các vấn đề liên quan