2012-06-11 10 views
9

Próbuję renderować łącze poprzedzone ikoną. Używam silnika szablonowego wraz z Bootstrap CSS.Jak renderować HTML wewnątrz szablonów Slim

Zazwyczaj można to zrobić w następujący sposób:

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

Według dokumentacji Slima, możemy użyć == uczynić bez ucieczki HTML. Tak więc, tłumacząc to Slim, próbowałem następujące zmiany:

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 

Wszystkie warianty świadczonych <a href="https://stackoverflow.com/users/1"><i class="icon-user"></i> My Profile</a> ucieczce tag i.

Jak mogę zatrzymać Slim lub Rails przed ucieczką html?

(Rails 3.2 z Slim 1.2.1)

Odpowiedz

9

Chcesz wyłączyć ucieczki dla link_to argumentu, a nie całego link_to wyniku HTML. Jesteś całkiem blisko ze swoim html_safe, ale twoja interpolacja ciągów znaków pochłania Twoją flagę "bezpieczne dla HTML". To powinno działać lepiej:

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

Alternatywnie, można napisać to jako

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

który prawdopodobnie jest trochę łatwiejsze do odczytania.

+0

dodając, że jeśli mają wartość atrybutu, który powinien być renderowany jako bezpiecznego HTML, użyj dwukrotnie „=”: 'rozpiętość danych ikona == icon' (gdzie ostatnia ikona jest zmienną zawierającą &#...;) – elado

+0

@elado: czy szczupła dokumentacja nie jest dokładnie odwrotna: https://github.com/slim-template/slim#output-without-html-escaping-? – MoMolog

+2

'==' nie ucieka, '=' robi. Możesz użyć 'tag attr = variable', aby zrenderować zmienną unikniętą. jeśli nie chcesz tego uciec, użyj 'tag attr == variable'. Na przykład, aby renderować encję html jako atrybut poprawnie, nie powinieneś tego unikać: ruby: 'icon =" { "' slim: 'span.icon data-icon == icon' – elado

1

Istnieje inny sposób rozwiązania tego problemu poniżej, na wypadek gdyby pomógł on komukolwiek. Użycie bloku jest szczególnie użyteczne, jeśli masz bardziej złożony kod, który ma zawierać link.

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

To zostało odebrane, ale jeśli faktycznie masz jakiś html i chcesz renderować go w wąskim szablonie, użyj podwójnej równości.

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

będzie taka sama jak

= "<i>test</i>".html_safe 
Powiązane problemy