17

我正在尝试呈现一个带有图标的链接。我正在使用Slim模板引擎和Bootstrap CSS

通常您可以通过以下方式执行此操作:

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

根据 Slim 的文档,我们可以==在不转义 HTML 的情况下进行渲染。因此,将其翻译为 Slim,我尝试了以下变体:

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

所有变体都呈现<a href="/users/1"><i class="icon-user"></i> My Profile</a>逃避i标签。

如何阻止 Slim 或 Rails 转义 html?

(带有 Slim 1.2.1 的 Rails 3.2)

4

5 回答 5

15

已经回答了这个问题,但是如果您实际上有一些 html 并且您想在一个苗条的模板中呈现它,请使用 double equal。

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

将与

= "<i>test</i>".html_safe
于 2015-12-03T00:53:16.847 回答
13

您想禁用link_to参数的 HTML 转义,而不是整个link_to结果。您与您的非常接近,html_safe但您的字符串插值正在吃掉您的“HTML 安全”标志。这应该会更好:

li= link_to '<i class="icon-user"></i> My Profile'.html_safe, current_user
于 2012-06-11T22:44:20.917 回答
10

或者,您可以将其写为

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

这可以说是更容易阅读。

于 2013-03-22T10:19:22.753 回答
1

如果对任何人有帮助,下面还有另一种解决方法。如果您有更复杂的代码要包含在链接中,则使用块特别有用。

li
  = link_to current_user do
    i.icon-user>
    | My Profile
于 2015-11-02T06:46:58.960 回答
0

如果您愿意,可以使用 slim 语法而不是“原始”html 来执行类似的技术:

li = link_to Slim::Template.new{ "i.icon-user\n| My Profile" }.render.html_safe, current_user

呈现为:

  • 我的简历
  • 或生的:

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

    在上面的示例中,要按照问题中的要求呈现“我的个人资料”文本,您需要使用"which allows the use of \nor new line 来形成正确的苗条语法。\t如果做嵌套苗条,会给你你需要的标签。

    如果可以在 icon 元素内呈现文本,那么以下内容将起作用:

    li = link_to Slim::Template.new{ 'i.icon-user My Profile' }.render.html_safe, current_user
    

  • 我的简历
  • <li>
      <a href="/current_user_url">
        <i class="icon-user">My Profile</i>
      </a>
    </li>
    

    如果将行为放在您自己的辅助方法中:

    # ApplicationController.rb
    
    def string_to_slim(string)
      Slim::Template.new{ string }.render.html_safe
    end
    helper_method :string_to_slim # allows you to call the method in a view via ERB or Slim
    

    .slim然后你可以在从你的基本控制器继承的控制器呈现的视图中实现这样的:

    li = link_to string_to_slim('i.icon-user My Profile'), current_user
    
    于 2020-04-17T01:19:46.853 回答