2012-06-11 21 views
9

Estoy tratando de renderizar un enlace precedido por un ícono. Estoy usando Slim motor de plantillas junto con Bootstrap CSS.Cómo renderizar HTML dentro de las plantillas Slim

Por lo general, usted puede hacer esto de la siguiente manera:

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

De acuerdo con la documentación de Slim, que podemos utilizar para hacer == sin escapar HTML. Por lo tanto, la traducción de este a Delgado, probé las siguientes variaciones:

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 

Todas las variaciones prestados <a href="https://stackoverflow.com/users/1"><i class="icon-user"></i> My Profile</a> escapar de la etiqueta i.

¿Cómo puedo evitar que Slim o Rails escapen html?

(Rails 3.2 con Slim 1.2.1)

Respuesta

9

desea desactivar HTML escape para el argumento link_to, no todo el link_to resultado. Estás muy cerca con tu html_safe pero la interpolación de tu cadena se está comiendo tu bandera "segura para HTML". Esto debería funcionar mejor:

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

Alternativamente, se podría escribir esto como

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

la que podría decirse que es un poco más fácil de leer.

+0

Añadiendo que si usted tiene un valor de atributo que debe ser traducido como html seguro, utilizar el doble "=": 'lapso de datos en iconos == icon' (donde el último ícono es una variable que contiene &#...;) – elado

+0

@elado: ¿la delgada documentación no dice exactamente lo contrario: https://github.com/slim-template/slim#output-without-html-escaping-? – MoMolog

+2

'==' no escapa, '=' lo hace. Puede usar 'tag attr = variable' para representar una variable escapada. si no desea escapar, use 'tag attr == variable'. Por ejemplo, para representar correctamente una entidad html como un atributo, no debe escaparse: ruby: 'icon =" { "' slim: 'span.icon data-icon == icon' – elado

1

Hay otra manera de abordar esto a continuación en caso de que ayude a alguien. Usar un bloque es especialmente útil si tiene un código más complejo para incluir dentro del enlace.

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

Esto ha sido respondido, pero si realmente tiene algún html y desea renderizarlo en una plantilla delgada, use el doble de igual.

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

será el mismo que

= "<i>test</i>".html_safe 
Cuestiones relacionadas